SumaMoito

SumaMoito is a collection of languages that aims to include minimal Turing-complete languages with a particular style.
Currently there are three languages in this collection:
SumaMoito-Z1, SumaMoito-Z2 and SumaMoito-N.
They have been published in this wiki by User:Atrapado.
== SumaMoito-Z1 ==
has the following elements:
 a $ # variable declaration. variables are unbounded integers initialized to 0.
 a + # variable increment.
 a - # variable decrement.
 a % ... # loop. execute given block of code (...) while 'a' is not equal to 0.
== SumaMoito-Z2 ==
has the following elements:
 a $ # variable declaration. variables are unbounded unsigned integers initialized to 0.
 a + # variable increment.
 a - # variable decrement. does nothing if the variable is already 0.
 a % ... # loop. execute given block of code (...) while 'a' is not equal to 0.
== SumaMoito-N ==
has the following elements:
 a $ # variable declaration. variables are unbounded unsigned integers initialized to 0.
 a + # variable increment.
 a = # variable reset. set variable to value 0.
 a b % ... # loop. execute given block of code (...) while 'a' not equals 'b'.
== Computational class ==
SumaMoito-Z2 has been proven Turing complete by simulation of Bitwise Cyclic Tag. The details required to construct the interpreter can be found in the log of #esoteric for 8 January, 2012.
SumaMoito-N has been proven Turing complete by reducting SumaMoito-Z2 to SumaMoito-N. Below is the proof.
 Z2--------------N
 block block
 declaration declaration
 increment increment
 decrement dec1 (see decrement examples below)
 a % ... zero $ a zero % ...
SumaMoito-Z1 is also Turing complete, proven by reducting Sumamoito-Z2 to SumaMoito-Z1. Below is the proof.
 Z2--------------Z1
 block block
 declaration declaration
 increment increment
 decrement dec3 (see decrement examples below)
 loop loop
== Language development ==
* Tokens are separated by whitespace.
* Nesting can be expressed with indentation.
* Alternative format with '{' and '}' instead of indentation.
* There are procedures, which may have arguments.
* Argument passing is by reference; any procedure argument can be used for input and output.
* Procedures are declared with the name of the procedure, followed by arguments, followed by '@'
* Procedure calls are defined with the name of the procedure, followed by arguments, followed by '!'
* Variable declarations can appear anywhere (before using) and its scope begins in the previous '{' and ends in the matching '}' (or corresponding indentation); a variable can not be declared twice in the same scope; declaring the same variable name in different (overlapping or not) scopes of the same procedure has been not decided whether it is allowed or not.
* In principle it is not valid to mix code from the different languages (-Z1 -Z2 -N) neither call procedures from one language to another.
== Code examples ==
=== Copy ===
Copy the value from one variable to another without destroying the first one.
SumaMoito-Z2 code:
 copy1 a b @
 c $
 b %
 b -
 a %
 a -
 b +
 c +
 c %
 c -
 b +
 a +
SumaMoito-N code:
 copy2 a b @
 b =
 a b %
 b +
=== Add ===
==== Add two values onto a third one ====
SumaMoito-Z2 code:
 sum3a a b c @
 e $
 f $
 g $
 copy1 a e !
 copy1 b f !
 copy1 g c !
 e %
 c +
 e -
 f %
 c +
 f -
SumaMoito-N code:
 sum3b a b c @
 d $
 c =
 c a %
 c +
 d b %
 c +
 d +
==== Add one value to another ====
SumaMoito-Z2 code:
 sum2a a b @
 e $
 copy1 a e !
 e %
 b +
 e -
SumaMoito-N code:
 sum2b a b @
 d $
 d a %
 b +
 d +
=== Multiply ===
SumaMoito-N code:
 mult3 a b c @
 d $
 c =
 d a %
 sum2b b c !
 d +
=== Decrement ===
SumaMoito-N code:
 dec1 a @
 tmp $
 a tmp %
 b $
 c $
 b +
 b a %
 b +
 c +
 a =
 a c %
 a +
 tmp +
 dec2 in out @
 temp $
 out =
 in temp %
 copy2 in temp !
 tmp $
 tmp +
 tmp in %
 out +
 tmp +
SumaMoito-Z1 code (decrement if greater than 0; only works for positive or 0 values):
 dec3 a @
 tmp1 $
 tmp2 $
 a %
 tmp1 +
 tmp2 +
 a -
 tmp1 %
 tmp1 -
 a +
 tmp2 %
 tmp2 %
 tmp2 -
 a -
Category:Languages
Category:Turing complete
Category:2012