summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--opdracht1/opdracht1.tex (renamed from opdracht1.tex)0
-rw-r--r--tryouts/fold.icl40
3 files changed, 44 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 981ca62..23b0057 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,7 @@
*.synctex.gz
_minted-*/
+### Clean
+Clean\ System\ Files/
+a.out
+
diff --git a/opdracht1.tex b/opdracht1/opdracht1.tex
index 2ba6a5e..2ba6a5e 100644
--- a/opdracht1.tex
+++ b/opdracht1/opdracht1.tex
diff --git a/tryouts/fold.icl b/tryouts/fold.icl
new file mode 100644
index 0000000..26967d2
--- /dev/null
+++ b/tryouts/fold.icl
@@ -0,0 +1,40 @@
+module fold
+
+import StdEnv
+
+:: List a = Nil | Cons a (List a)
+
+(~>) infixr 4 :: (a (List a) -> List a)
+(~>) = Cons
+
+foldr :: (a -> b -> b) b (List a) -> b
+foldr f x Nil = x
+foldr f x (Cons a l) = f a (foldr f x l)
+
+map :: (a -> b) -> (List a) -> (List b)
+map f = foldr (Cons o f) Nil
+
+sum = foldr (+) zero
+product = foldr (*) one
+
+any = foldr (||) False
+all = foldr (&&) True
+
+copy = foldr Cons Nil
+append a b = foldr Cons b a
+length = foldr (\_ n -> n + 1) 0
+
+:: Tree a = Node a (List (Tree a))
+
+(@) infixr 4 :: (a (List (Tree a)) -> Tree a)
+(@) = Node
+
+foldtree :: (a -> b -> c) (b -> c -> b) b (Tree a) -> c
+foldtree f g a (Node l ts) = f l (foldtree` f g a ts)
+where
+ //foldtree` :: (a -> b -> c) (c -> b -> b) b (List (Tree a)) -> b ??
+ foldtree` f g a (Cons t r) = g (foldtree f g a t) (foldtree` f g a r)
+ foldtree` f g a Nil = a
+
+Start = map ((*)2) (5 ~> 10 ~> Nil)
+