PREFIX
Jump to navigation
Jump to search
PREFIX is an esolang based entirely on prefix notation and function calling.
Language Constructions
In order to call a function and its arguments, one would do so like this:
function arguments
No parentheses are needed.
PREFIX has 3 basic language constructions:
- if condition, what to do: If condition is true, do what to do. What to do must be treated as one instruction.
- while execute condition, what to do: While executing execute condition returns true, do what to do. Both execute condition and what to do must be treated as one instruction.
- seq...end: Executes everything between seq and end. This is treated as one instruction.
Built-in Functions
Function | Description |
---|---|
add n1 n2 |
return the sum n1 + n2 |
sub n1 n2 |
return the difference n1 - n2 |
mul n1 n2 |
return the product n1 * n2 |
div n1 n2 |
return the quotient n1 / n2 |
mod n1 n2 |
return the remainder n1 % n2 |
set var n1 |
set var to n1; return n1 |
print string |
print string to standard output |
readin |
return one character from standard input |
readln |
return one line from standard input |
con var, string |
concatenate string to end of var |
len arg |
return the length of tostring arg
|
dec var |
declare variable var |
darray var |
declare array var |
sarr array n1 |
return array[n1] |
sstr string n1 |
return the n1th character of the zero-indexed string string |
eq arg1 arg2 |
return true if arg1 = arg2 |
neq arg1 arg2 |
return true if arg1 != arg2 |
gt arg1 arg2 |
return true if arg1 > arg2 |
geq arg1 arg2 |
return true if arg1 >= arg2 |
lt arg1 arg2 |
return true if arg2 > arg1 |
leq arg1 arg2 |
return true if arg2 >= arg1 |
and arg1 arg2 |
return true if arg1 and arg2 are true |
or arg1 arg2 |
return true if arg1 or arg2 is true |
not arg1 |
return true if arg1 is not true |
tostring arg |
return arg as a string |
tonum arg |
return arg as a number; true is 1, false is 0 |
toascii arg |
return the ascii char for tonum arg
|
fromascii arg |
return the ascii number of the character for tostring arg
|
nop |
does nothing |
eof |
return eof |
pi |
return π |
e |
return e |
Turing-completeness
In order to show that PREFIX is turing-complete, I have written a BF interpreter for it. The looping semantics may be off, though, so feel free to edit it.
define main: decl prog decl ip darray mem decl mp darray stack decl sp decl c set ip 0 set mp 0 while neq con prog readin "!" nop while lt ip len prog seq set c sstr prog ip #Set c to current character if eq c "+" set sarr mem mp add sarr mem mp 1 if eq c "-" set sarr mem mp sub sarr mem mp 1 if eq c ">" set mp add mp 1 if eq c "<" set mp sub mp 1 if eq c "." print toascii sarr mem mp if eq c "," set sarr mem mp fromascii readin if eq c "[" seq if neq sarr mem mp 0 seq set sarr stack sp ip set sp add sp 1 end if eq sarr mem mp 0 while neq sstr prog ip "]" set ip add ip 1 end if eq c "]" seq if neq sarr mem mp 0 seq set ip sarr stack sp set sp sub sp 1 end set ip add ip 1 end
Final Comments
- PREFIX is a rather easy-to-code in esolang. Maybe it even isn't.
- To implement PREFIX you will need a lot of stacks. Beware.