tricu

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

countLines.scp (750B)


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