Complode
Jump to navigation
Jump to search
Complode is a stack-based language with not very many commands.
Command | Description |
---|---|
numbers | Push a number to stack. It can be any integer. |
/ | Do a calculation (read the instructions below). |
(code) | Create a code-block and push to stack. |
.name(code) | Define a macro. Each name macro can be defined only once. |
,name | Use a macro. |
; | Comment until end of line. |
_I | Input one byte, push to stack |
_O | Pop from stack and output one byte |
The calculation is:
- Pop A
- Pop B
- Pop C
- Pop E
- Pop F
- Pop Z
- If A>0 Then Let G=var(A) Else Pop G
- If B>0 Then Let H=var(B) Else Let H=G
- If C>0 Then Let var(C)=E
- If B>0 Then Let var(B)=F*G
- If Z>0 Then Push H+F+E
- If Z<0 And A<0 And B<0 Then it will push a list of all variables -A to -B and their values (as a single entry) to a stashing stack
- If Z<0 And A=0 And B=0 Then it will pop one entry from the stashing stack and restore all of the values of those variables
- If Z=0 And A<0 Then Push F*E
If a code-block is popped during this calculation, it is looped, at the beginning of the loop it pops a value from the stack and if it is zero it stops the loop, and pops again the value it was trying before, and if is also a code-block it does again with this code-block, until it is a number; the exception is "Pop G" which does not loop and keeps the code-block as is, and then if it is part of an addition or multiplication the numbers in that calculation are ignored and the result is just the code-block. Popping an empty stack returns zero.
Examples
Some useful macros:
.dup( 0 -1 0 0 0 -1 -1 / 0 1 0 0 1 0 / 1 0 0 0 0 1 / 1 0 0 0 0 1 / 0 -1 0 0 0 0 0 / ) .discard( 0 0 0 0 0 0 / ) .swap( 0 -1 0 0 0 -2 -1 / ; stash var(1) and var(2) 0 1 0 0 1 0 / ; store to var(1) 0 1 0 0 2 0 / ; store to var(2) 1 0 0 0 0 1 / ; get from var(1) 1 0 0 0 0 2 / ; get from var(2) 0 -1 0 0 0 0 0 / ; unstash var(1) and var(2) ) .setvar( 0 -1 0 0 0 -1 -1 / 0 1 0 0 1 0 / 0 1 0 0 1 0 0 0 0 1 / 0 0 -1 0 0 0 0 0 / / )