From d4d1cadf0d1819a2487bc4e6dad4028bce10af81 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 26 Sep 2017 10:57:41 +0200 Subject: Assignment 3.3 --- assignment-3/genericMap.icl | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'assignment-3/genericMap.icl') 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 -- cgit v1.2.3