diff --git a/W1/calculator.fsx b/W1/calculator.fsx index 53ef0ad..faf6de8 100644 --- a/W1/calculator.fsx +++ b/W1/calculator.fsx @@ -24,9 +24,6 @@ let rec lookup v = function | (v', k) :: vtab -> if v = v' then k else lookup v vtab | (_ : SymTab) -> failwith ("unbound variable : " + v) -(* HELP FUNCTIONS *) -let VALUEtoint = function INT x -> x - (* EVALUATION *) (***************************************************** @@ -42,8 +39,8 @@ let rec eval (vtab : SymTab) (e : EXP) : VALUE = | VARIABLE v -> lookup v vtab | OPERATE (op, e1, e2) -> - let exp1 = VALUEtoint (eval vtab e1) - let exp2 = VALUEtoint (eval vtab e2) + let (INT exp1) = eval vtab e1 + let (INT exp2) = eval vtab e2 match op with | BPLUS -> INT (exp1 + exp2) | BMINUS -> INT (exp1 - exp2) @@ -53,8 +50,8 @@ let rec eval (vtab : SymTab) (e : EXP) : VALUE = let vtab = bind var exp1 vtab eval vtab e2 | OVER (rop, var, e1, e2, e3) -> - let exp1 = VALUEtoint (eval vtab e1) - let exp2 = VALUEtoint (eval vtab e2) + let (INT exp1) = eval vtab e1 + let (INT exp2) = eval vtab e2 let results = [ for i in exp1..exp2 -> let vtab = bind var (INT i) vtab