{ :Prefix - :Infix < :Infix <= :Infix > :Infix >= :Infix = :Infix != :Infix + :Infix - :Infix * :Infix / :Infix % :read :show :compare :min :max :pow :gcd :abs :fold } Where Define (pow b n) Iterate {a b n} From {1 b n} Let a If [[n % 2] = 1] [a * b] a Let n [n / 2] In If [n = 0] a (Continue a [b * b] n) Define (gcd b a) Iterate {b a} If [a = 0] (abs b) (Continue a [b % a]) Define (fold n z succ) Iterate {i r} From {0 z} If [i = n] r (Continue [i + 1] (succ i r)) Where Define (read text) Let n (Prim chunk_size text) In Iterate {i num} From {0 0} Cond { | [i = n] 'just.num | True Let c (Prim chunk_fetch_uint8 text i) In If (And [c >= `0`] [c <= `9`]) (Continue [i + 1] [[10 * num] + [c - `0`]]) 'nothing } Define (show i) (Prim show_integer i) Where Define (compare a b) Cond { | [a < b] 'less | [a > b] 'greater | True 'equal } Define (min a b) If [a < b] a b Define (max a b) If [a > b] a b Define (abs n) If [n < 0] -n n Where Define -a (Prim negate a) Define [a < b] (Prim less a b) Define [a <= b] (Prim less_or_equal a b) Define [a > b] (Prim greater a b) Define [a >= b] (Prim greater_or_equal a b) Define [a = b] (Prim equal a b) Define [a != b] If (Prim equal a b) False True Define [[a] + b] (Prim add a b) Define [[a] - b] (Prim subtract a b) Define [[a] * b] (Prim multiply a b) Define [a / b] (Prim quotient a b) Define [a % b] (Prim remainder a b)