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 -