summaryrefslogtreecommitdiff
path: root/assignment-3
diff options
context:
space:
mode:
authorCamil Staps2017-09-26 10:57:41 +0200
committerCamil Staps2017-09-26 10:57:41 +0200
commitd4d1cadf0d1819a2487bc4e6dad4028bce10af81 (patch)
tree4d6e142351be94486a93e312dc6e957bfa852d15 /assignment-3
parentAssignment 3.2 (diff)
Assignment 3.3
Diffstat (limited to 'assignment-3')
-rw-r--r--assignment-3/genericMap.icl20
1 files changed, 17 insertions, 3 deletions
diff --git a/assignment-3/genericMap.icl b/assignment-3/genericMap.icl
index 8d24d96..f2f195b 100644
--- a/assignment-3/genericMap.icl
+++ b/assignment-3/genericMap.icl
@@ -1,6 +1,8 @@
module genericMap
-import StdEnv, StdGeneric
+import StdEnv
+import StdGeneric
+import GenEq
generic gMap a b :: a -> b
gMap{|Int|} x = x
@@ -13,8 +15,20 @@ gMap{|CONS|} f (CONS x) = CONS (f x)
gMap{|OBJECT|} f (OBJECT x) = OBJECT (f x)
:: Bin a = Leaf | Bin (Bin a) a (Bin a)
+
+derive gMap [], (,), Bin
+
t = Bin (Bin Leaf 1 Leaf) 2 (Bin (Bin Leaf 3 Leaf) 4 Leaf)
l = [1..7]
-Start = (l, t)
-
+// Part 1
+Start = gMap{|*->*|} fac t
+//Start = gMap{|*->*|} (\i -> (i, fac i)) l
+//Start = gMap{|*->*->*|} (gMap{|*->*|} fac) (gMap{|*->*|} fac) (l,t)
+
+// Part 2
+//Start = gEq{|*|} [1,2] [1,2]
+//Start = gEq{|*|} [1,2] [2,3]
+//Start = gEq{|*->*|} (\a b -> not (a < b || b < a)) [1,2] [2,3]
+
+fac n = let fs = [1:1:[(fs!!(i-1)) + (fs!!(i-2)) \\ i <- [2..]]] in fs !! n