From Esolang
Jump to navigation Jump to search
The title of this page is incorrect because of technical limitations. The correct title is suicide.

suicide is a language create by User:fr34k in 2008. suicide is Turing complete. It has a limit of 676 variables, but if these are unbounded it can emulate a Minsky machine.

Language overview


Relational and equality operators

::   Is equal to

.:   Is not equal to

<.   Is smaller than

>.   Is greater than

<:   Is smaller than or equal to

>:   Is greater than or equal to

Arithmetic and shorthand arithmetic operators


   +    Normal
   +:   Shorthand


   -    Normal
   -:   Shorthand


   *    Normal
   *:   Shorthand


   /    Normal
   /:   Shorthand

Built-in functions

For loop

While loop

If statement

If, else statement
   !(condition)>statement|else statement

Function and variable defining

Define a function

Define an integer

Define a string
    *vxx:"Hello, world!"


When programming in suicide each new statement must appear on a new line. Variable and function identifiers may only be of two characters length and must be capitalized. Each identifier has a preceding letter, defining what kind of identifier it is. v is used for variables and f is used for functions. In suicide there is no such thing as "stand-alone integers". In pseudo-code it would look something like this, in a typical language:

for(a=0; a < 20; a++){ statements };

This is illegal in suicide and would instead be written like this

for(a=0; a < b=20; a++){ statements };




When defining a new variable in suicide, each new variable identifier must have a preceding star (*)


This code would assign 1 to the variable AA

*vAA:"Hello, world!"

This code would assign the string "Hello, world!" to the variable AA

When fetching variables one just use the identifier for the variable as in the example below


Here we store 1 in AA and put it in AB


Just as when defining variables, each new function must have a preceding star.


Notice that in suicide you can have both a function called AA and at the same time a variable called AA. Meaning that the following program is legal

fAA(*vAB:"Hello, world!")

While this is illegal

fAA("Hello, world!")

The above legal program would output "Hello, world!", but without a new line. Printing out a line with a line break, one would instead use the << command.


Hello, world!

<*vAA:"Hello, world!"

99 bottles of beer

*vAB:" bottles of beer on the wall,"
*vAC:" bottles of beer on the wall."
*vAD:" bottles of beer."
*vAE:"Take one down, pass it around."
*vAF:" bottle of beer on the wall,"
*vAG:" bottle of beer on the wall."
*vAH:" bottle of beer."
*vAI:"No bottles of beer on the wall."

Note: the above code is not tested and might be illegal or faulty

Simple addition


Turing completeness

The language with unbounded variables is Turing-complete by reduction from 3-cell Brainfuck. Assign the three cells the names a, b, and c, d is the data pointer, and e is for literals.

  • + and - become a sequence of 3 if statements testing d and applying +e=1 or -e=1 to the appropriate choice of a, b, or c
  • > and < update the value of d accordingly
  • [statements] compiles to a sequence of 3 if statements testing d, each containing a while loop on the value of the appropriate variable with the condition >e=0 with the copy of whatever statements compiles to.