NTFJ
| Paradigm(s) | imperative |
|---|---|
| Designed by | Conor O'Brien |
| Appeared in | 2016 |
| Memory system | stack-based |
| Computational class | Unknown computational class |
| Major implementations | Original, C implementation, Online interpreter |
| File extension(s) | .ntfj |
NTFJ is a minimalist language created by User:Conor O'Brien. It originally had four commands: NAND, TRUE, FALSE, JUMP. These were the basis for its name. The language operates on a stack by manipulating bits and integers.
NTFJ has 13 commands:
| Command | Name | Explanation |
|---|---|---|
| |
NAND | Pops two values A and B and pushes A NAND B; if A and B are both bits, it pushes 1-(A&B); otherwise, it pushes 255-(A&B).
|
~ |
FALSE | Pushes 0 to the stack.
|
# |
TRUE | Pushes 1 to the stack.
|
^ |
JUMP | Pops n, jumps to the nth command.
|
@ |
BYTE | Pops eight values V1...V8 and pushes the number V1*(2^7) + ... + V8*(2^0) OR, if V1 > 1, pushes the bits in that number.
|
( |
PEEK | If the top value of the stack is 0, jumps to the next ).
|
) |
ENDPEEK | Closes a ( command.
|
$ |
DROP | Drops the top value of the stack. |
: |
DUP | Duplicates the top value of the stack |
/ |
LENGTH | Pushes the number of items in the stack. |
{ |
ROTATE | Pops N; shifts the stack and pushes it to the front N times.
|
} |
REV ROTATE | Pops N; pops from the stack and unshifts it N times.
|
` |
DEBUG | Displays the program's state. |
The normal logical operators are representable in NTFJ:
- Logical negation is
:|:(A NAND A) = NOT (A AND A) = NOT A. - Logical conjunction (and) is
|:|:NOT (A NAND B) = NOT NOT (A AND B) = A AND B. - Logical disjunction (or) is
:|#}:|#{|.#}and#{simply poke around the stack and focus onBand A respectively.(NOT A) NAND (NOT B) = NOT ((NOT A) AND (NOT B)) = A OR B.
Computation class
It is thought that NTFJ is Turing Complete, as it bears a remarkable resemblance to Etre.
Minification
One can begin to remove some commands from NTFJ. The following commands are superfluous ` *.
# is equivalent to ~~|, or 0 NAND 0.
$ is equivalent to ~|:||, which converts the top of the stack into 1, then negates it into 0, then NAND's the resulting value. A NAND 1 = A, so the top value is ignored.
Thus, the following 9 commands are left:
| ~ ^ @ ( ) : { }
@ is needed to jump, and : is needed to produce more values on the stack.