Commit d2387098 authored by Taddeus Kroes's avatar Taddeus Kroes

funclang series5: Added test file for ass12.

parent d793bb9e
#use "ass12.ml";;
(* let a = 1 in b *)
print_endline (expr2string (Let ("a", (Num 1), (Var "b"))));;
(* a + 3 *)
print_endline (expr2string (BinopAp (Add, Var "a", Num 3)));;
(* -a *)
print_endline (expr2string (MonopAp (Neg, Var "a")));;
let show_freevars e =
let free = match freevars e with
[] -> ""
| [x] -> x
| h::t -> List.fold_left (fun a b -> a ^ ", " ^ b) h t
in
print_endline ("\nFree variables in:\n" ^ (expr2string e)
^ "\nare: [" ^ free ^ "]")
;;
(* Write the expressions of assignment series 1 in our data types *)
let u = Var "u" in
let c = Var "c" in
let bcc = l "b" (l "c" c) in
let a = Var "a" in
let aaa = l "a" (app a a) in
let aaa_aaa = app aaa aaa in
let v = Var "v" in
let uvw = l "u" (app (l "v" (l "w" v)) (l "a" a)) in
let 1a = (app (app bcc aaa_aaa) uvw);;
let v = Var "v" in
let w = Var "w" in
let uvw = l "u" (l "v" (l "w" (app (app u v) w))) in
let x = Var "x" in
let y = Var "y" in
let z = Var "z" in
let xyz = l "x" (l "y" (l "z" (app x (app y z)))) in
let a = Var "a" in
let b = Var "b" in
let c = Var "c" in
let 1b = (app (app (app (app uvw xyz) a) b) c);;
(* [a] *)
show_freevars (Fun ("b", (BinopAp (Add, Var "a", Num 3))));;
(* [] *)
show_freevars (Fun ("a", (BinopAp (Add, Var "a", Num 3))));;
let l arg body = Fun (arg, body);;
let app f e = FunAp (f, e);;
(* [] *)
show_freevars 1a;;
(* [a, b, c] *)
show_freevars 1b;;
(* fun u -> fun w -> fun a -> a *)
(*print_endline (expr2string (subs 1b));;*)
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