fun abs(n: Numeric) { if n < 0: return -n; return n; } fun min(x, y) { if x < y: return x; return y; } fun max(x, y) { if x > y: return x; return y; } Func = type(abs); NFunc = type(print); Numeric = int | float; Callable = Func | NFunc; Collection = List | Map; # Stringify a number between 0 and 9. fun stringFromDigit(digit: int) { assert(digit >= 0 and digit <= 9); return string.chr(string.ord("0") + digit); } # Stringify an unsigned integer fun stringFromInteger(n: int) { # This function returns the magnitude of the # argument and the power of 10 with the same # magnitude. fun getIntegerMagnitude(n: int) { assert(n >= 0); magn = 0; powr = 1; # Basically grow the power until it's # bigger than the input. while n >= powr * 10: { powr = 10 * powr; magn = 1 + magn; } return magn, powr; } negative = (n < 0); # Get the power of 10 with the # magnitude of the input. _, power = getIntegerMagnitude(n); temp = abs(n); # Temporary copy of the input text = ""; # The output we're about to compute while power >= 1: { # Pop the leftmost digit from [temp]. digit = temp / power; # Get the leftmost digit temp = temp % power; # Remove it # Add the digit to the output. text = string.cat(text, stringFromDigit(digit)); # Prep for the next iteration. power = power / 10; } if negative: text = string.cat("-", text); return text; } fun floatFromInteger(n: int) return 1.0 * n; fun integerFromDigit(char: String) { res = ord(char) - ord('0'); if res < 0 or res > 9: error("String isn't a digit"); return res; } fun append(array: List, item) array[count(array)] = item;