tricu

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

countLines-fast.scp (1003B)


      1 -- Focused experiment: inline up to two no-carry bits before calling successor.
      2 -- Unshipped: duplicated arithmetic increases build/bundle size.
      3 consumer countLines
      4   []            @ (count, (pending, successor)) => choose equal pending leaf count
      5     match count of (
      6       leaf => 1
      7       | (leaf, higher) => (stem leaf, higher)
      8       | (stem leaf, leaf) => 2
      9       | (stem leaf, (leaf, higher)) => (leaf, (stem leaf, higher))
     10       | _ => call successor count as next in next)
     11   [byte | rest] @ (count, (pending, successor)) => choose equal byte 10
     12     match count of (
     13       leaf => recur rest @ (1, (leaf, successor))
     14       | (leaf, higher) => recur rest @ ((stem leaf, higher), (leaf, successor))
     15       | (stem leaf, leaf) => recur rest @ (2, (leaf, successor))
     16       | (stem leaf, (leaf, higher)) => recur rest @ ((leaf, (stem leaf, higher)), (leaf, successor))
     17       | _ => call successor count as next in recur rest @ (next, (leaf, successor)))
     18     recur rest @ (count, (stem leaf, successor))