Morphett's FALSEVersion of implementation Morphett's FALSE of programming language FALSE
The only known version of this interpreter.
A string is equivalent to a command which simply prints it. There’s no way to put the string on the stack, except for as a part of a function.
This example uses iterative method of factorial calculation. Variables
f store current number (loop counter) and current factorial value. After the variables are initialized, the loop starts.
[i;17=~] defines the continuation condition: as long as
i doesn’t equal 17. Loop body follows:
i and a string constant are printed,
i is incremented, old value of
f is printed and new value of
f is calculated.
For Wouter’s FALSE 1.2.CF factorial values for 13 and above are calculated with overflow error.
0i: 1f: [i;17=~] [i; $."! = " 1+$i: f;$.10, *f:] #
This example uses iterative method of calculating Fibonacci numbers. Variables
b store current numbers, variable
i is loop counter.
The second loop empties the stack (deletes Fibonacci numbers written there by the first loop). Some interpreters tolerate data left in stack after program completion, but Wouter’s FALSE requires that the stack is empty and throws a runtime error otherwise.
0i: 1a: 1b: [i;16=~] [a; $. ", " $ b; $ a: + b: i;1+i:] # "..." [1=~]  # %
The input string is processed character by character. In Morphett’s FALSE strings are entered in a pop-up window, and end of input is marked by an empty line, which is then converted to
-1 value. That’s why
-1 is used for breaking the loop. Variable
s stores “whether the previous character was a space” sign. Conditional commands execution (
?) allows to run only
if-then conditions; to implement
else branch, one has to copy the condition (stored in variable
l — whether the current character is a letter), invert it and use another
1_s: ^ [$1_=~] [ $$ 96> \123\> & [32-]? $$ 64> \91\> & $l: [s;~[32+]? , 0s:]? l;~[1_s: %]? ^] #