Yuontlitled
Yuontlitled(pronounced you-n-tli-tled) is an esolang devised by User:Yayimhere, purely to have a visual style similar to (___;___). It is a very separated esolang, as in, it has multiple systems that do not easily interact, however this is not intentional, but does add to the overall esoteric-ness of the language.
Syntax and memory
Yuontlitled programs are made up of codeblocks. Codeblocks are bracket surrounded code. Every codeblock has a value. This value is called the assigned register. Every assigned register starts at 0. There's also a few other additional states/memory items:
- A queue called the save queue. This holds register values that have been "saved"
- A sort of address space, holding info, in no specific format, on whether a specific codeblock has been abstained. Abstained codeblocks are not ran until they are reinstated.
- A leaving point for every codeblock. This is the command that was going to be ran, but instead a jump was performed to another codeblock. When a specific codeblocks in jumped to again, then execution will resume at this point. If the leaving point is outside of the codeblock, then the next codeblock is chosen, wrapping around the program(unless if the codeblock *didnt* leave via jump, and left normally, in which it will be set to 0). Note that abstaining and the reinstating resets the leaving point.
When a specific codeblock has ended, its leaving point is reset, and the next codeblock is chosen for execution.
Operations
Below are all the operations that can be present within a codeblock:
- _: increment the assigned register.
- ;: enqueue the assigned register's value to the end of the queue.
- ': shifts a value of the front of the queue, and decrements the assigned value by that.
- .: move forward as many times as the value of the assigned register(by codeblocks not characters), wrapping around the program(note that the value jumped by, is incremented by one).
- ?: abstain this codeblock and jump to the one following it. This removes the value of the leaving point. There must always be a point to jump to, otherwise this is an error. Unlike
.it does not jump - x: select the codeblock that would have been jumped to if a
.had been ran. If that codeblock is not abstained, abstain it. Else, reinstate it.
Examples
Looping counter in queue:
(;.)
Looping counter in assigned value:
(_.)
Constructs
Two useful construct exist(to my knowledge):
(x)(x)(...) ( )(...)(.)
Now how do these work. Let's start with (x)(x)(...). It runs (...), but only on two specific cycles. Lets mark abstained blocks with a 1 and see how the running goes:
(x)(x)(...)
1
(x)(x)(...)
1
(x)(x)(...)
1
(x)(x)(...)
1
as you can see, (...) only runs on cycle of two!!!
( )(...)(.) runs forever in a loop, WITHOUT modifying any values.