Commit b98b9952 authored by Taddeus Kroes's avatar Taddeus Kroes

funclang series5: Source code cleanup.

parent a8a58134
...@@ -9,8 +9,9 @@ let rec eval exp = ...@@ -9,8 +9,9 @@ let rec eval exp =
| _ -> raise (Failure "Unknown unary operator") | _ -> raise (Failure "Unknown unary operator")
in in
let eval_binop binop = match binop with let eval_binop binop = match binop with
(op, Num a, Num b) -> (match op with (op, Num a, Num b) ->
(* Arithmethic or relational operation is possible on numbers *) (* Arithmethic or relational operation is possible on numbers *)
(match op with
Add -> Num (a + b) Add -> Num (a + b)
| Sub -> Num (a - b) | Sub -> Num (a - b)
| Mul -> Num (a * b) | Mul -> Num (a * b)
...@@ -23,9 +24,11 @@ let rec eval exp = ...@@ -23,9 +24,11 @@ let rec eval exp =
| Gt -> Bool (a > b) | Gt -> Bool (a > b)
| Ge -> Bool (a >= b) | Ge -> Bool (a >= b)
| _ -> raise (Failure "Unknown arithmetic/relational operator")) | _ -> raise (Failure "Unknown arithmetic/relational operator"))
| (op, Bool a, Bool b) -> (match op with | (op, Bool a, Bool b) ->
(* Locical operation is possible on booleans *) (* Locical operation is possible on booleans *)
And | Or -> Bool (if op = And then a && b else a || b) (match op with
And -> Bool (a && b)
| Or -> Bool (a || b)
| _ -> raise (Failure "Unknown locical operator")) | _ -> raise (Failure "Unknown locical operator"))
| (op, e1, e2) -> BinopAp (op, eval e1, eval e2) | (op, e1, e2) -> BinopAp (op, eval e1, eval e2)
in in
......
...@@ -29,7 +29,7 @@ test_expr2string "a * 3" (BinopAp (Mul, Var "a", Num 3));; ...@@ -29,7 +29,7 @@ test_expr2string "a * 3" (BinopAp (Mul, Var "a", Num 3));;
let l arg body = Fun (arg, body);; let l arg body = Fun (arg, body);;
let app func arg = FunAp (func, arg);; let app func arg = FunAp (func, arg);;
(* Define resursive factorial function for test usage *) (* Define resursive factorial function for a more extensive test *)
let fac = let fac =
let eq = BinopAp (Eq, Var "n", Num 0) in let eq = BinopAp (Eq, Var "n", Num 0) in
let sub = BinopAp (Sub, Var "n", Num 1) in let sub = BinopAp (Sub, Var "n", Num 1) in
...@@ -81,6 +81,7 @@ test_eval "c + b" (Let ("a", Var "c", (BinopAp (Add, Var "a", Var "b"))));; ...@@ -81,6 +81,7 @@ test_eval "c + b" (Let ("a", Var "c", (BinopAp (Add, Var "a", Var "b"))));;
test_eval "a" (Cond (Bool true, Var "a", Var "b"));; test_eval "a" (Cond (Bool true, Var "a", Var "b"));;
test_eval "b" (Cond (Bool false, Var "a", Var "b"));; test_eval "b" (Cond (Bool false, Var "a", Var "b"));;
(* Test resolving of name clash *)
let x = Var "x" in let x = Var "x" in
let y = Var "y" in let y = Var "y" in
let z = Var "z" in let z = Var "z" in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment