Divzeros

Divzeros program is in a format with function definitions name = expression and a semicolon, the last entry is the main program, without a name and equal sign. The function name can contain uppercase/lowercase letters, period, comma, and numbers, but it cannot start with a number.
The program is in the form of a expression, using these operators (listed from high priority to low priority):
 (x) This is a parentheses for grouping expressions.
 ?x Output the character x and returns x.
 ? Input a character and return its ASCII number.
 #x Returns what the return value was of the x-1 iteration of the current
 subprogram. If x-1 is negative it returns the last return value of the 
 parent subprogram, if x is too large the subprogram quits.
 # Returns the number of the iteration of the current subprogram. First
 iteration is number zero.
 <x Returns left half unmingle of x.
 >x Returns right half unmingle of x.
 _x Returns x times negative one.
 !x Returns bitwise NOT x.
 @ Returns parameter given to this function.
 x*y
 x/y
 x%y Returns x times/divide/modulo y. If x is zero it will not evaluate y, and
 if y is zero in division or modulo function, the subprogram quits. The
 division is integer division rounded toward negative infinity.
 x+y
 x-y Returns x plus or minus y.
 x&y Returns bitwise x AND y. Does not evaluate y if x is zero.
 x^y Returns bitwise x XOR y.
 x|y Returns bitwise x OR y. Does not evaluate y if x is negative one.
 x$y Returns x mingle y (as in INTERCAL). If one of them is negative and one
 is non-negative, then y will be bitwise NOT before evaluation, to make
 both the same sign.
 x~y Returns x select y (as in INTERCAL). If x is zero it will not evaluate y.
 [x] Executes a subprogram in a loop. Returns the last return value of the
 subprogram expression before it quit.
Numbers can be integers only, and can be written in decimal, or in hex with ` at front, or as a character ' and the character to get the ASCII value of.
You can make a string by putting quotation marks around it. This string can only be used as a parameter for a function call. The code fn("abC") will expand to (fn('a)+fn('b)+fn('C))
Functions are invoked by indicating the name of the function followed by the parameter to give to the function.
Comments can be written by putting text between {{ and }}
==Examples==
To copy input to output forever:
 ??
To copy input to output until a null character is received (and output the null character as well):
 1/??
To copy input to output until a null character is received (but omit the null character from the output):
 (#/?##)*0+?
Hello world program:
 (?'H+?'e+?'l+?'l+?'o+?',+?' +?'W+?'o+?'r+?'l+?'d+?'!)/0
To compare if 2 numbers equal:
 Equal=1-(1&(@~@));
 {{
 You can call it like: Equal(x-y)
 The result will be 0 if not equal, 1 if is equal
 }}
Check if x is less than y:
 Less=1-[(#*#(1-@)/(2-#))*0+#];
 {{
 You can call it like: Less(x-y)
 The result will be 0 if x>=y, 1 if x<y
 }}
Beer program (using UNIX newline):
 Amount=99;
 Print=?@;
 Equal=1-(1&(@~@));
 BottlesOfBeer=Print(" bottles of beer");
 OnTheWall=Print(" on the wall")+?10;
 Current=Amount()-#;
 PrintNumber=(@/10)*?('0+(@/10))+?('0+(@%10));
 NoMore=Equal(Current()-1)*(Print("No more bottles of beer on the wall")/0);
 Line1=PrintNumber(Current())+BottlesOfBeer()+OnTheWall();
 Line2=PrintNumber(Current())+BottlesOfBeer()+?10;
 Line3=Print("Take 1 down and pass it around")+?10;
 Line4=NoMore()+PrintNumber(Current()-1)+BottlesOfBeer()+OnTheWall();
 Iteration=Line1()+Line2()+Line3()+Line4()+?10;
 Iteration()
== External resources ==
* Interpreter in Python 3
Category:Languages
Category:Declarative paradigm
Category:2007
Category:Unknown computational class
Category:Implemented