(defcc {(list number) ==> number} := (- 0 ); := ; ; ; ;) (defcc {(list number) ==> symbol} 45 := skip;) (defcc {(list number) ==> symbol} 43 := skip;) (defcc {(list number) ==> number} := (compute-integer ); ) (defcc {(list number) ==> (list number)} := [ | ]; := [];) (defcc {(list number) ==> number} Byte := (byte->digit Byte) where (digit*? Byte);) (define digit*? {number --> boolean} Byte -> (and (>= Byte 48) (<= Byte 57))) (define byte->digit {number --> number} Byte -> (- Byte 48)) (define compute-integer {(list number) --> number} Digits -> (compute-integer-h (reverse Digits) 0)) (define compute-integer-h {(list number) --> number --> number} [] _ -> 0 [Digit | Digits] Expt -> (+ (* (expt* 10 Expt) Digit) (compute-integer-h Digits (+ Expt 1)))) (define expt* {number --> number --> number} _ 0 -> 1 Base Expt -> (* Base (expt* Base (- Expt 1))) where (> Expt 0) Base Expt -> (/ (expt* Base (+ Expt 1)) Base)) (defcc {(list number) ==> number} := (+ );) (defcc {(list number) ==> symbol} 46 := skip;) (defcc {(list number) ==> number} := (compute-fraction );) (define compute-fraction {(list number) --> number} Digits -> (compute-fraction-h Digits -1)) (define compute-fraction-h {(list number) --> number --> number} [] _ -> 0 [Digit | Digits] Expt -> (+ (* (expt* 10 Expt) Digit) (compute-fraction-h Digits (- Expt 1)))) (defcc {(list number) ==> number} := (compute-E ); := (compute-E );) (defcc {(list number) ==> number} := ; := (- 0 ); ;) (defcc {(list number) ==> symbol} 101 := skip;) (define compute-E {number --> number --> number} N Log10 -> (* N (expt* 10 Log10)))