tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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))