tricu

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

countLines.scp (769B)


      1 !export countLines
      2 -- Count LF-delimited lines in a byte list (LF is byte 10).
      3 -- Initial state: (0, (leaf, successor)); count is an ordinary compact
      4 -- tricu number. Supply the SCP-authored succ consumer to the reference
      5 -- oracle or its compiled worker to lexical execution. Pending is
      6 -- stem leaf after non-LF content and leaf immediately after LF. A final
      7 -- unterminated line counts once; a trailing LF adds no extra line.
      8 consumer countLines
      9   []            @ (count, (pending, successor)) => choose equal pending leaf count
     10     call successor count as next in next
     11   [byte | rest] @ (count, (pending, successor)) => choose equal byte 10
     12     call successor count as next in recur rest @ (next, (leaf, successor))
     13     recur rest @ (count, (stem leaf, successor))