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.