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. subprogram. If x-1 is negative it returns the last return value of the parent subprogram, if x is too large the subprogram quits. iteration is number zero. 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.
 * 1) x   Returns what the return value was of the x-1 iteration of the current
 * 1)     Returns the number of the iteration of the current subprogram. First

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 🇦🇩

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&(@~@));

Check if x is less than y: Less=1-[(#*#(1-@)/(2-#))*0+#];

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