| Language | Atom | Structure | Power | Order |
|---|---|---|---|---|
| FRACTRAN | Number | Number | Divisible?, Divide, Multiply | Return to Start on Match |
| Tote | Symbol | Multiset<Symbol> | Contains?, Remove, Insert | RSM, Timed, Interaction |
| Thue | Character | String<Character> | Contains?, Remove, Insert | Random |
| Nova | Symbol | Dict<Stack<Tuple<Symbol>>> | Top?, Variable Match, Variable Memory, Depth, Push, Pop | RSM |
| Modal | Symbol | Tree*<Tuple<Symbol>> | Subtree?, Prune, Graft, Variable Match, Variable Memory | RSM |
| regex replacement | Character | String<Character> | Match?, Regular Expression, Variable Match, Variable Memory, Negation | No intrinsic order (RSM in bx's implementation) |
| PuzzleScript | Object | Layer* x Grid<Object> | Present?, Moving?, Negation, Remove, Place | Repeat Rule Until Inactive |
FRACTRAN to tote
77/5 == ♠ -> ♡♢tote to FRACTRAN
♡♡♢ -> ♠♣ == 35/12Thue (deterministic) to Modal
AA::=B
===
<> (A (A ?x)) (B ?x)
Nova to Modal
>:a: 2 :b: 1
>:c: 3
===
<> ((2 ?a) (1 ?b) ?c) (?a ?b (3 ?c))
Create a "token" using predefined symbols
<Type:Data>
Example: < Unary:(1*) >< Op:UnaryAdd >< Unary:(1*) > ➡ < Unary:$1$2 >
nova is interesting in that it's easy to write rules that can look at two different "places"
equivalent modal code needs to remember all the stacks when replacing
syntax matters a lot for human ergonomics but almost none at all in purely describing systems