RecurseMe

RecurseMe is a esoteric programming language invented by User:Zzo38 that the program code can call itself recursively.

Commands

 * + - < > = Same as Brainfuck
 * [ ] = Mark beginning and end of entire program, anything after ] is comments
 * # = Call itself recursively
 * Lowercase letters = Swap value at pointer with value of a register (all registers start at zero)
 * Uppercase letters = If value of register is zero, then exit subroutine, if non-zero, then go back to beginning of subroutine
 * ; : = Input to/output from last register swapped (if none, then error)
 * Numbers 0 to 9 = Skip a number of commands if value at pointer is zero (so 0=NOP, 1=skips next command if value is zero, etc.)
 * & = Skip next 2 commands
 * / = Switch between main memory and auxilliary memory (only affects + - < > and numbers commands)

SimulRecurseMe
This variant of RecurseMe is one where you can have multiple programs running simultaneously (well, not really, because it has to wait for input/output, so it is more like coroutines), doing input and output between each other. You can also have macros.

Each subprogram is defined with name in {} before [ and each macro is defined with name in before [ and macros are called with name in

Subprograms each have their own memory and registers, they run separately from main program and other subprograms. To select a subprogram to input/output with, use {} with name in between, in the program code. Use {} with nothing in between for I/O with the caller (with the program's main input/output if the main program).

Macros are included by writing their name within within the program code. Macros do not accept parameters.

Examples
Cat program: [z;:Z]

Simple variable storage in SimulRecurseMe: (Make a variable with something like: {name}[(var)]) (var)[zz:;1&++yY] (store)[z;zy:y] (recall)[z;:z]