add.scp (1484B)
1 !export addBinary 2 -- Bitwise addition of two canonical compact naturals. Input: (left, right). 3 -- State: (carry, successor), where carry is Leaf or Stem Leaf and successor 4 -- is an SCP worker. Explicit cases expose bit and carry semantics. 5 consumer addBinary 6 (leaf, right) @ (leaf, _) => right 7 (leaf, right) @ (stem leaf, successor) => call successor right as sum in sum 8 (left, leaf) @ (leaf, _) => left 9 (left, leaf) @ (stem leaf, successor) => call successor left as sum in sum 10 ((leaf, a), (leaf, b)) @ (leaf, successor) => (leaf, recur (a, b) @ (leaf, successor)) 11 ((leaf, a), (stem leaf, b)) @ (leaf, successor) => (stem leaf, recur (a, b) @ (leaf, successor)) 12 ((stem leaf, a), (leaf, b)) @ (leaf, successor) => (stem leaf, recur (a, b) @ (leaf, successor)) 13 ((stem leaf, a), (stem leaf, b)) @ (leaf, successor) => (leaf, recur (a, b) @ (stem leaf, successor)) 14 ((leaf, a), (leaf, b)) @ (stem leaf, successor) => (stem leaf, recur (a, b) @ (leaf, successor)) 15 ((leaf, a), (stem leaf, b)) @ (stem leaf, successor) => (leaf, recur (a, b) @ (stem leaf, successor)) 16 ((stem leaf, a), (leaf, b)) @ (stem leaf, successor) => (leaf, recur (a, b) @ (stem leaf, successor)) 17 ((stem leaf, a), (stem leaf, b)) @ (stem leaf, successor) => (stem leaf, recur (a, b) @ (stem leaf, successor))