@(deffilter incdig ("0" "1") ("1" "2") ("2" "3") ("3" "4") ("4" "5") ("5" "6") ("6" "7") ("7" "8") ("8" "9")) @(define increment (num out)) @ (local prefix dig junk) @ (next :string num) @ (cases) 9 @ (bind out "10") @ (or) @*{prefix}@{dig /[0-8]/} @ (bind out `@prefix@{dig :filter incdig}`) @ (or) @*{prefix}9 @ (bind out `@{prefix :filter (:fun increment)}0`) @ (or) @junk @ (throw error `bad input: @junk`) @ (end) @(end) @in @(increment in out)