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.

Mel

From Esolang
Jump to navigation Jump to search

Mel (Minsky machine equivalent language) is an esolang invented by User:None1.

Commands

Every line is a command:

+++...+<accumulator name>

Increases the accumulator by the number of +'s.

For example:

+++A

Adds A by 3.

---...-<accumulator name>

If accumulator is not zero, decrement the accumulator, otherwise jump to line x, where x is the number of -'s (1-indexed).

For example:

---B

Decrements B if it's nonzero, otherwise jumps to line 3.

There are two accumulators: A and B, they are both unbounded. Programs are case-insensitive.

Translation from minsky machine

It can be easily translated, for example, this minsky machine program, in Szewczyk notation for Minsky machine notation:

1 -1
1 1
1 1

Can be translated to:

+A
-A
-A

But it's not Turing complete since there needs to be 3 counters to be Turing-complete

Interpreter in Python

import sys
c=sys.stdin.read().lower().strip().split('\n')
ip=0
acc=[0,0]
while ip<len(c):
    cmd=c[ip]
    idx=(0 if cmd[-1]=='a' else 1)
    if cmd[0]=='+':
        ip+=1
        acc[idx]+=len(cmd)-1
    else:
        if acc[idx]:
            acc[idx]-=1
            ip+=1
        else:
            ip=len(cmd)-2
    # print('a={} b={}'.format(*acc))