Clementine
Jump to navigation
Jump to search
- This language is a work in progress. There may be changes in the future.
Clementine (CLM) is a four command simple translation of Underload (excluding output) discovered by User:Orby during May 2020.
Commands
CLM is similar to Underload, but uses a different basis. CLM is composed of 4 commands: [, ], e and k.
The symbols e, k and the empty string are concatenative combinators. If a and b are concatenative combinators then [a] and ab are concatenative combinators.
CLM as a term rewriting language
CLM uses two rewrite rules. They are applied from left to right.
Pattern | Rewrite |
---|---|
[b] [a] e | [[b]a] [a[b]] [ba] |
[b] [a] k | a |
where a and b are concatenative combinators.
CLM as a stack based language
Command | Action |
---|---|
[ | Begin a quote. To enclose a combinator in quotes means to push it onto the stack. |
] | End a quote. To enclose a combinator in quotes means to push it onto the stack. |
e | Pop a. Pop b. Push [b]a. Push a[b]. Push ba. |
k | Pop a. Pop b. Execute a. |
Simple translation to Underload
Note that this is proof of Turing-completeness.
Underload | CLM |
---|---|
! | []k |
a | []e!! |
~ | ae!k |
^ | []~k |
* | e~!~! |
: | []e!*^ |
( | [ |
) | ] |
CLM | Underload |
---|---|
e | a~a*:(a~*)*~:(a*)*~(~*)***^ |
k | ~!^ |
[ | ( |
] | ) |
Restricted CLM
A restricted version of CLM that is quote free consists of the combinators [], [e], [k] and k. It is Turing-complete by the following reduction to Underload.
Underload | CLM |
---|---|
! | []k |
a | [][][e]k!! |
~ | a[][e]k!k |
^ | []~k |
* | [][e]k~!~! |
: | [][][e]k!*^ |
(!) | []a[k]* |
(a) | []a[e]*(!)*(!)* |
(~) | (a)[e]*(!)*[k]* |
(^) | []a(~)*[k]* |
(*) | [e](~)*(!)*(~)*(!)* |
(:) | []a[e]*(!)*(*)*(^)* |
Open questions
- Is there a single concatenative combinator f with a single rewrite rule such that f combined with quoting is Turing-complete? What about "restricted f" with (), (f) and f?
- Does a three command simple translation of CLM exist?
- Does a two command simple translation of CLM exist?
See also
- Underload was the first esoteric programming language of this sort.
- The Theory of Concatenative Combinators was a major inspiration for this language.