tricu

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

recursionList.tri (1345B)


      1 !import recursion as R
      2 !import format_support *
      3 !export matchesRecursion
      4 
      5 collect head state = R.listContinue (pair head state)
      6 collectTail head tail state = R.listContinue (pair head state)
      7 stopAtTwo 2 tail state = R.listStop state
      8 stopAtTwo head tail state = R.listContinue (pair head state)
      9 saveTail head tail state = R.listStop tail
     10 malformed head tail state = pair (t t t) [9]
     11 numericFlag head tail state = pair 1 [9]
     12 
     13 spin self input = triage t (_ : t) (left right : self input) input
     14 bottom input = y spin input
     15 unreached head tail state = R.listContinue (bottom head)
     16 stopBefore 1 tail state = R.listStop state
     17 stopBefore head tail state = R.listContinue (bottom head)
     18 
     19 runRecursion which input state = (let
     20   choose 0 = R.listFoldUntil input state collect
     21   choose 1 = R.listFoldTailUntil input state stopAtTwo
     22   choose 2 = R.listFoldTailUntil input state saveTail
     23   choose 3 = R.listFoldTailUntil input state malformed
     24   choose 4 = R.listFoldTailUntil input state numericFlag
     25   choose 5 = R.listFoldTailUntil input state unreached
     26   choose 6 = R.listFoldTailUntil input state stopBefore
     27   choose 7 = R.listFoldTailUntil input state collectTail
     28   choose other = pair state input
     29   in choose which)
     30 
     31 matchesRecursion (which, (input, (state, expected))) = equal? (runRecursion which input state) expected
     32 matchesRecursion fixture = false