git @ Cat's Eye Technologies Lariat / 158cf8e
Implement "beta-reduce a term" and improve tests. Chris Pressey 3 years ago
1 changed file(s) with 28 addition(s) and 9 deletion(s). Raw diff Collapse all Expand all
88 -- (should really be unit tests; for now, run them manually)
99 --
1010
11 test1 = app (abs "n" (var "n")) (var "n")
11 testVar = (var "n")
12 testAbs = (abs "n" (var "n"))
13 testApp = app testAbs testVar
1214
1315 testDestruct t = destruct t
1416 (\n -> "var:" ++ (show n))
1921 test2b = testDestruct (app (var "n") (var "m"))
2022 test2c = testDestruct (abs "n" (var "n"))
2123
22 test3a = freevars test1
23 test3b = freevars (app (var "n") (var "n"))
24 test3a = (freevars testApp) == ["n"]
25 test3b = (freevars testAbs) == []
26 test3c = (freevars (app (var "n") (var "n"))) == ["n"]
2427
25 test4a = resolve (test1) (var "q") -- test1 is not an abs so no change
26 test4b = resolve (abs "n" (var "m")) (var "q")
27 test4c = resolve (abs "n" (var "n")) (var "q")
28 test4a = (show $ resolve (testApp) (var "q")) == "App (Abs (BoundVar 0)) (FreeVar \"n\")"
29 test4b = (show $ resolve (abs "n" (var "m")) (var "q")) == "FreeVar \"m\""
30 test4c = (show $ resolve (abs "n" (var "n")) (var "q")) == "FreeVar \"q\""
2831
2932 --
3033 -- Name supply
6467 contains j t' names'
6568 )
6669
67 testContains1 = contains "n" test1 names -- True
68 testContains2 = contains "m" test1 names -- False
69 testContains3 = contains "n" (abs "n" (var "n")) names -- False
70 testContains1 = (contains "n" testApp names) == True
71 testContains2 = (contains "m" testApp names) == False
72 testContains3 = (contains "n" (abs "n" (var "n")) names) == False
73
74 --
75 -- "beta-reduce a term" example
76 --
77
78 beta t = destruct t
79 (\n -> var n)
80 (\u v -> destruct u
81 (\_ -> app u v)
82 (\_ _ -> app u v)
83 (\u -> resolve u v)
84 )
85 (\u -> u)
86
87 testBeta1 = (show $ beta testApp) == "FreeVar \"n\""
88 testBeta2 = (show $ beta testAbs) == "Abs (BoundVar 0)"