Mmmm()

Mmmm is an esoteric "microlanguage" by SuperJedi224, inspired in part by Brainf***.

The only characters the interpreter actually pays any attention to are,  ,  ,  ,  ,  ,  ,  ,  ,  , and.

Because all number literals are simply ignored, the most succinct known way to output the number  is. (If number literals were not ignored, you could express this much more simply as .)

An interpreter can be found here.

M denotes a variable declaration

denotes a loop while a value popped of the stack is neither  or

returns

returns

initializes a counter (which is initially )

pushes  to the stack

pops a value from the stack and returns it; returns  if the stack is already empty

takes a number from the input stream and returns it

appends  to the output stream

appends the character whose unicode id is  to the output stream

calls  and returns its return value if a is neither   nor  ; otherwise returns

returns  if , or   otherwise

returns a random number on [0,1).

Of course, because the language has no number literals, you have to construct these numbers

If  contains a number,   returns. If  contains a counter object,   increments the counter and returns the new value.

Example Program
This program takes a number from input, and outputs the square (comments should be removed):

Mmmm=m[m[m.m].m(m.m)].m;        //mmm = counter(0) Mmmmmmmmmm=m.m;                     //mmmmmmmmm = 0  (the accumulator) mmm.m; Mmm=mmm.m;                          //mm = 2 mmm.m; Mmmmm=m[mmm.m].m;                 //mmmm = input Mmmmmm= mmm.m;mmm.m;mmm.m;      //mmmmm = 5 Mmmmmmmmm=mmm.m;                    //mmmmmmmm = 8 m[mm].m(mmmm);                         //push input to stack Mmmmmmm=m[mmmmmmmm].m(mmmm);          //mmmmmmm = input - 1 Mmmmmmmm=mmmm; <                                      //Begin loop m[mm].m(mmmmmm);                   //push input copy - 1 to stack mmmmmmm=mmmm;                      //mmmmmmm=input mmmmmm=m[mmmmmmmm].m(mmmmmm);      //mmmmmm-=1 m[mm].m(mmmmmmm);                  //push mmmmmmm <        mmmmmmmmm=m[m.m].m(mmmmmmmmm);//increment accumulator mmmmmmm=m[mmmmmmmm].m(mmmmmmm); //decrement mmmmmmm m[mm].m(mmmmmmm);              //push decremented value > > m[mmmmm].m(mmmmmmmmm);                 //output accumulator

Without comments, this becomes: Mmmm=m[m[m.m].m(m.m)].m;Mmmmmmmmmm=m.m;mmm.m;Mmm=mmm.m;mmm.m;Mmmmm=m[mmm.m].m;Mmmmmm= mmm.m;mmm.m;mmm.m;Mmmmmmmmm=mmm.m;m[mm].m(mmmm);Mmmmmmm=m[mmmmmmmm].m(mmmm);Mmmmmmmm=mmmm;>m[mmmmm].m(mmmmmmmmm);

This is the "Hello, World!" program: Mmm=m[m.m].m(m.m); Mmmm=m[mm].m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;Mmmmm=mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;m[mmmm].m(mmm.m); mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;Mmmmmm=mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; Mmmmmmmmm=mmm.m; m[mmmm].m(mmm.m); mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;Mmmmmmm=mmm.m; m[mmmm].m(mmmmmm);m[mmmm].m(mmmmmm); mmm.m;mmm.m; Mmmmmmmm=mmm.m; m[mmmm].m(mmmmmmm); mmm.m;mmm.m; Mmmmmmmmmm=mmm.m; Mmmm=m[mm].m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m; Mmmmmmmmmmm=mmm.m; Mmmmmmmmmmmm=mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m;mmm.m;mmm.m; mmm.m;mmm.m; m[mmmm].m(mmm.m); m[mmmm].m(mmmmmmmmmm); m[mmmm].m(mmmmm); m[mmmm].m(mmmmmmm); m[mmmm].m(mmmmmmmmm); m[mmmm].m(mmmmmm); m[mmmm].m(mmmmmmmm); m[mmmm].m(mmmmmmmmmmm);