Random-ass Turing Complete Language
You can abbreviate the title to Ratcl if the title is too long. Also, the title is always capitalized like that.
- This is still a work in progress. It may be changed in the future.
Ratcl is a stack-based language, so it uses stacks. And "stacks" because you can have multiple.
Code execution
Commands in Ratcl all technically single characters, but they (mostly) use the characters to the left and right side as modifiers. Every command (including modifiers) are separated by either spaces or newlines.
Let's take the example abc
. Say a
had a right side modifier, b
used both sides as modifiers, and c
did nothing (these aren't what they actually do). When the code is executed, a
would first run, but it uses a modifier on the right side. When this happens, that character is skipped. So it will run a
and then skip b
, so it does nothing. Then c
runs, but it does nothing, so nothing happens. So only a
will run (and use b
).
Note: The -
command is VERY useful. Check the miscellaneous section for what it does.
Commands
Note: Any time "pop x
and y
" is said, x
is the topmost item and y
is the second item.
Stack manipulation
Left modifier | Command | Right modifier | Description |
---|---|---|---|
c
|
stack name | Create a stack under the name <stack name>. | |
r
|
stack name | Remove stack <stack name>. | |
stack | p
|
value (0-f) | Push <value> (0-f or 0-15) to stack <stack>. |
"
|
stack | Push the entirety of the next line onto <stack> from left to right. | |
stack | s
|
sub-command (s , q , d , or r )
|
Runs <sub-command> on <stack>. s swaps the top two items, q removes the top item, d duplicates the top item, and r reverses the entire stack.
|
stack A | >
|
stack B | Moves the top item from <stack A> to <stack B>. |
'
|
stack | Push a space (32) to <stack>. |
Arithmetic and logic
Left modifier | Command | Right modifier | Description |
---|---|---|---|
stack | a
|
sub-command (+ , + , - , * or / )
|
Pops x and y , and pushes y <sub-command> x to <stack>.
|
stack | l
|
sub-command (> , = , <
|
Pops x and y , and pushes 1 if x <sub-command> y is true, 0 otherwise.
|
!
|
stack | Pop x and push 1 if x is 0 , and push 0 otherwise.
| |
R
|
stack | Pop x and y , and push a random number (inclusive) between y and x
|
I/O
Left modifier | Command | Right modifier | Description |
---|---|---|---|
stack | i
|
sub-command (c or i )
|
Takes either one character or number, and pushes it to <stack>. |
stack | o
|
sub-command (c or i )
|
Pops the top item off of <stack>, and outputs it as a character or number. |
Control flow
Left modifier | Command | Right modifier | Description |
---|---|---|---|
u
|
stack | Pop a number from <stack> (x ) and jump to line x unconditionally (so no matter what).
| |
b
|
Binary jump; pop x and y off <stack>, and jump to line y if x is non-zero.
| ||
name | WIP: Add labels + creating them (unconditional and conditional) | stack (for conditinoal only) |
Miscellaneous
Left modifier | Command | Right modifier | Description |
---|---|---|---|
-
|
Skips the next command. When dealing with left side modifiers, this becomes very helpful. Try it for yourself and you will understand. | ||
~
|
Comment. Using this will ignore the rest of the line. So far in my python implementation of this, comments aren't supported. |
Examples
A+B Problem
ca ~ Create a stack -aii -aii ~ Take 2 inputs from the user as numbers -aa+ ~ Add them -aoi ~ Output as number
Input: 2 3
>> Output: 5
Input 2: 30 72
>> Output: 102
Hello, world!
ca ~ Create stack "a ~ Push "Hello," followed by a space and "world!" Hello, 'a "a world! -asr ~ Reverse the stack so it's the same way it was pushed on ~ As of now I didn't think of a way to generalize outputting strings, so we have this. -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc -aoc ~ Lol
Output: Hello, world!