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