35 (no { c <> c_0 /\ c <> c_1 /\ c <> c_2 /\
36 c <> c_3 /\ c <> c_4 /\ c <> c_5 /\
37 c <> c_6 /\ c <> c_7 /\ c <> c_8 /\
41 let atoi (c: char) (ok (i:int)) (err) =
43 (ok {0}) (ok {1}) (ok {2}) (ok {3}) (ok {4})
44 (ok {5}) (ok {6}) (ok {7}) (ok {8}) (ok {9})
47 let unSpace (c: char) (space) (else) = if {c = space} space else
49 let rec next (w: word) (i: int) {..} (k (c: char) {c <> space})
51 (-> {0 <= i < length w} (! next {w} {i+1} k))
54 let rec lit (w: word) (i v: int) (k (kv: int) (c: char) {c <> space})
56 (fun (i: int) -> lit {w} {i} {10 * v + i} k)
58 (-> next {w} {i + 1} (k {v}))
61 let rec atom (w: word) (i: int) {..} (k (kv: int) (c: char))
62 = next {w} {i} . fun (c: char) ->
65 fun (kv: int) (c: char) -> if {c <> rpar}
67 (-> next {w} {i+1} (k {kv})))
68 (-> atoi {c} (fun (n:int) -> lit {w} {i+1} {n} k) fail)
70 with term (w: word) (i: int) (k (kv: int) (c: char)) =
71 atom {w} {i} . fun (kv: int) (c: char) ->
73 (-> term {w} {kv} (fun (v': int) (c: char) -> k {v*v'} c))
76 with sum (w: word) (i: int) (k (kv: int) (c: char)) = any
78 let count (w: word) {} (ret (r: int) {}) = any