diff options
author | Camil Staps | 2016-02-02 19:24:50 +0100 |
---|---|---|
committer | Camil Staps | 2016-02-02 19:24:50 +0100 |
commit | a7d7542dc646a5fd124ef71e71ce260889f1701b (patch) | |
tree | 04ed89503bbb3cc9933273a1326a53ca724c3492 /1415/files/practicum/BinTreeMapEnFold.icl | |
parent | week6 camil: working positioning of lines by putting empties at left and righ... (diff) |
Diffstat (limited to '1415/files/practicum/BinTreeMapEnFold.icl')
-rw-r--r-- | 1415/files/practicum/BinTreeMapEnFold.icl | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/1415/files/practicum/BinTreeMapEnFold.icl b/1415/files/practicum/BinTreeMapEnFold.icl new file mode 100644 index 0000000..c74a454 --- /dev/null +++ b/1415/files/practicum/BinTreeMapEnFold.icl @@ -0,0 +1,34 @@ +module BinTreeMapEnFold
+
+import StdEnv
+
+:: BTree a = Tip a | Bin (BTree a) (BTree a)
+
+testboom = Bin (Bin (Bin (Tip 1) (Tip 2)) (Tip 3)) (Bin (Bin (Tip 4) (Tip 5)) (Bin (Tip 6) (Bin (Tip 7) (Tip 8))))
+
+mapbtree :: (a -> b) (BTree a) -> BTree b
+mapbtree f (Tip a) = Tip (f a)
+mapbtree f (Bin t1 t2) = Bin (mapbtree f t1) (mapbtree f t2)
+
+foldbtree :: (a a -> a) (BTree a) -> a
+foldbtree f (Tip a) = a
+foldbtree f (Bin t1 t2) = f (foldbtree f t1) (foldbtree f t2)
+
+f1 :: // meest algemene type
+f1 = foldbtree (+)
+
+f2 :: // meest algemene type
+f2 = foldbtree (+) o (mapbtree (const 1))
+
+f3 :: // meest algemene type
+f3 = foldbtree (\x y -> 1 + max x y) o (mapbtree (const 0))
+
+f4 :: // meest algemene type
+f4 = foldbtree (++) o (mapbtree (\x -> [x]))
+
+Start :: (Int,Char,Int,Char,Int,Char,[Int],Char)
+Start = (f1 testboom, '\n'
+ ,f2 testboom, '\n'
+ ,f3 testboom, '\n'
+ ,f4 testboom, '\n'
+ )
|