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