We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

suicide

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

Commands

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

Addition

   +    Normal
   +:   Shorthand

Subtraction

   -    Normal
   -:   Shorthand

Multiplication

   *    Normal
   *:   Shorthand

Division

   /    Normal
   /:   Shorthand


Built-in functions

For loop
   /(condition)>statement

While loop
   %(condition)>statement

If statement
   !(condition)>statement

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

Function and variable defining

Define a function
    *fxx(variables)>statement

Define an integer
    *vxx:1

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


Rules

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 };

Programming

Basics

Variables

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

*vAA:1

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

*vAA:1
*vAB:vAA

Here we store 1 in AA and put it in AB


Functions

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

*fAA(variables)>statements

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(*vAA)><*vAA
fAA(*vAB:"Hello, world!")

While this is illegal

*fAA(*vAA)><*vAA
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.


Examples

Hello, world!

<*vAA:"Hello, world!"

99 bottles of beer

*vAA:99
*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."
%(vAA>:*vAJ:1)>!(vAA>.1)><vAA<<vAB<vAA<<vAD<<vAEvAA-:1<vAA<<AC|<vAA<<AF<vAA<<AH<<vAE<<vAIvAA-:1

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

Simple addition

*vAA:4
*vAB:6
<*vAC:vAA+vAB

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.