summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMart Lubbers2015-04-24 09:10:46 +0200
committerMart Lubbers2015-04-24 09:10:46 +0200
commitaebffcc1c786e8cea15fff6f324bf71fc37cbb37 (patch)
tree0879f685fc1a35361727a203b437c67bb486e981
parentstarted with week2 (diff)
updated practicum files
-rw-r--r--files/practicum/GetallenRaden.icl13
-rw-r--r--files/practicum/Origami.icl17
-rw-r--r--files/practicum/StdDynSet.dcl24
-rw-r--r--files/practicum/StdDynSet.icl44
-rw-r--r--files/practicum/StdIOMonad.dcl39
-rw-r--r--files/practicum/StdIOMonad.icl15
-rw-r--r--files/practicum/StdListMonad.dcl7
-rw-r--r--files/practicum/StdListMonad.icl7
-rw-r--r--files/practicum/StdMaybeMonad.dcl9
-rw-r--r--files/practicum/StdMaybeMonad.icl10
-rw-r--r--files/practicum/StdQ.icl2
-rw-r--r--files/practicum/StdSet.icl24
-rw-r--r--files/practicum/StdSortList.icl2
-rw-r--r--files/practicum/StdStack.icl2
-rw-r--r--files/practicum/StdStateMonad.dcl11
-rw-r--r--files/practicum/StdStateMonad.icl16
16 files changed, 210 insertions, 32 deletions
diff --git a/files/practicum/GetallenRaden.icl b/files/practicum/GetallenRaden.icl
new file mode 100644
index 0000000..f03750a
--- /dev/null
+++ b/files/practicum/GetallenRaden.icl
@@ -0,0 +1,13 @@
+module GetallenRaden
+
+/* Dynamics werken alleen met de 32-bit versie van de Clean compiler.
+ (*) Gebruik Environment 'Experimental'
+ (*) In Project:Project Options: zet vlag 'Enable dynamics' aan
+*/
+import StdEnv
+import StdDynamic, StdDynamicFileIO // nodig voor dynamics en dynamics in files
+import StdFileSelect // platform file-selector dialoog
+
+Start :: *World -> *World
+Start world
+ = world
diff --git a/files/practicum/Origami.icl b/files/practicum/Origami.icl
index 304ca73..3c4dcc4 100644
--- a/files/practicum/Origami.icl
+++ b/files/practicum/Origami.icl
@@ -6,15 +6,18 @@ Start = and
[ sum` [1 .. 5] == sum [1 .. 5]
, prod` [1 .. 5] == prod [1 .. 5]
, flatten` [[],[1],[1,2],[1,2,3]] == flatten [[],[1],[1,2],[1,2,3]]
+ , length` [1 .. 5] == length [1 .. 5]
, reverse` [1 .. 5] == reverse [1 .. 5]
+ , filter` isEven [1 .. 100] == filter isEven [1 .. 100]
, takeWhile` ((<>) 0) [1,2,3,0,4,5,6] == takeWhile ((<>) 0) [1,2,3,0,4,5,6]
, maxList` [1 .. 5] == maxList [1 .. 5]
]
-sum` = ...
-prod` = ...
-flatten` = ...
-length` = ...
-reverse` = ...
-takeWhile` = ...
-maxList` = ...
+sum` xs = ...
+prod` xs = ...
+flatten` xs = ...
+length` xs = ...
+reverse` xs = ...
+filter` p xs = ...
+takeWhile` p xs = ...
+maxList` xs = ...
diff --git a/files/practicum/StdDynSet.dcl b/files/practicum/StdDynSet.dcl
new file mode 100644
index 0000000..de9a9b7
--- /dev/null
+++ b/files/practicum/StdDynSet.dcl
@@ -0,0 +1,24 @@
+definition module StdDynSet
+
+import StdOverloaded
+
+class Set a | TC, ==, toString a
+
+:: Set
+
+instance zero Set
+instance toString Set
+instance == Set
+
+toSet :: a -> Set | Set a
+
+nrOfElts :: Set -> Int
+isEmptySet :: Set -> Bool
+
+memberOfSet :: a Set -> Bool | Set a
+isSubset :: Set Set -> Bool
+isStrictSubset :: Set Set -> Bool
+
+union :: Set Set -> Set
+intersection :: Set Set -> Set
+without :: Set Set -> Set
diff --git a/files/practicum/StdDynSet.icl b/files/practicum/StdDynSet.icl
new file mode 100644
index 0000000..ee43631
--- /dev/null
+++ b/files/practicum/StdDynSet.icl
@@ -0,0 +1,44 @@
+implementation module StdDynSet
+
+import StdEnv
+import StdDynamic
+
+class Set a | TC, ==, toString a
+
+:: Set = Set [Dynamic]
+
+instance zero Set
+where zero = abort "zero instance voor Set nog niet geimplementeerd.\n"
+
+instance toString Set
+where toString a = abort "toString instance voor Set nog niet geimplementeerd.\n"
+
+instance == Set
+where == a b = abort "== instance voor Set nog niet geimplementeerd.\n"
+
+toSet :: a -> Set | Set a
+toSet a = abort "toSet nog niet geimplementeerd.\n"
+
+nrOfElts :: Set -> Int
+nrOfElts a = abort "nrOfElts nog niet geimplementeerd.\n"
+
+isEmptySet :: Set -> Bool
+isEmptySet a = abort "isEmptySet nog niet geimplementeerd.\n"
+
+memberOfSet :: a Set -> Bool | Set a
+memberOfSet x a = abort "memberOfSet nog niet geimplementeerd.\n"
+
+isSubset :: Set Set -> Bool
+isSubset a b = abort "isSubset nog niet geimplementeerd.\n"
+
+isStrictSubset :: Set Set -> Bool
+isStrictSubset a b = abort "isStrictSubset nog niet geimplementeerd.\n"
+
+union :: Set Set -> Set
+union a b = abort "union nog niet geimplementeerd.\n"
+
+intersection :: Set Set -> Set
+intersection a b = abort "intersection nog niet geimplementeerd.\n"
+
+without :: Set Set -> Set
+without a b = abort "without nog niet geimplementeerd.\n"
diff --git a/files/practicum/StdIOMonad.dcl b/files/practicum/StdIOMonad.dcl
new file mode 100644
index 0000000..a37a979
--- /dev/null
+++ b/files/practicum/StdIOMonad.dcl
@@ -0,0 +1,39 @@
+definition module StdIOMonad
+
+// Deze module verpakt een aantal StdFile functies in een monadische jas
+
+import StdMonad, StdMaybeMonad
+
+:: IO a
+:: Void = Void
+:: Filemode = Lees | Schrijf
+:: Filenaam :== String
+:: Filehandle
+
+// voer monadische I/O actie uit op de wereld:
+doIO :: (IO a) *World -> (a,*World)
+
+// IO is een monad:
+instance return IO
+instance >>= IO
+
+// lees regel van de console:
+read :: IO String
+
+// schrijf regel naar de console:
+write :: String -> IO Void
+
+// open de file met gegeven filenaam en mode:
+open :: Filenaam Filemode -> IO (Maybe Filehandle)
+
+// sluit de file met gegeven filenaam:
+close :: Filehandle -> IO Bool
+
+// bepaal of het lezen van de file klaar is:
+eof :: Filehandle -> IO Bool
+
+// lees een regel van een file:
+readline :: Filehandle -> IO (Maybe String)
+
+// schrijf een regel naar een file:
+writeline :: String Filehandle -> IO Bool
diff --git a/files/practicum/StdIOMonad.icl b/files/practicum/StdIOMonad.icl
new file mode 100644
index 0000000..c8ddaa5
--- /dev/null
+++ b/files/practicum/StdIOMonad.icl
@@ -0,0 +1,15 @@
+implementation module StdIOMonad
+
+// Deze module verpakt StdFile in een monadische jas
+
+import StdFile
+import StdMonad
+
+:: IO a // kies een geschikte representatie voor IO
+:: Filemode = Lees | Schrijf
+:: Filenaam :== String
+:: Filehandle // kies een geschikte representatie voor Filehandle
+
+instance toInt Filemode where
+ toInt Lees = FReadText
+ toInt Schrijf = FWriteText
diff --git a/files/practicum/StdListMonad.dcl b/files/practicum/StdListMonad.dcl
new file mode 100644
index 0000000..576ef55
--- /dev/null
+++ b/files/practicum/StdListMonad.dcl
@@ -0,0 +1,7 @@
+definition module StdListMonad
+
+import StdMonad
+
+instance return []
+instance >>= []
+instance fail []
diff --git a/files/practicum/StdListMonad.icl b/files/practicum/StdListMonad.icl
new file mode 100644
index 0000000..b3b3d62
--- /dev/null
+++ b/files/practicum/StdListMonad.icl
@@ -0,0 +1,7 @@
+implementation module StdListMonad
+
+import StdMonad
+
+instance return [] where return x = [x]
+instance >>= [] where >>= xs f = [y \\ x <- xs, y <- f x]
+instance fail [] where fail = []
diff --git a/files/practicum/StdMaybeMonad.dcl b/files/practicum/StdMaybeMonad.dcl
new file mode 100644
index 0000000..e9ebec1
--- /dev/null
+++ b/files/practicum/StdMaybeMonad.dcl
@@ -0,0 +1,9 @@
+definition module StdMaybeMonad
+
+import StdMonad
+
+:: Maybe a = Nothing | Just a
+
+instance return Maybe
+instance >>= Maybe
+instance fail Maybe
diff --git a/files/practicum/StdMaybeMonad.icl b/files/practicum/StdMaybeMonad.icl
new file mode 100644
index 0000000..1c6277d
--- /dev/null
+++ b/files/practicum/StdMaybeMonad.icl
@@ -0,0 +1,10 @@
+implementation module StdMaybeMonad
+
+import StdMonad
+
+:: Maybe a = Nothing | Just a
+
+instance return Maybe where return x = Just x
+instance >>= Maybe where >>= (Just x) f = f x
+ >>= Nothing f = Nothing
+instance fail Maybe where fail = Nothing
diff --git a/files/practicum/StdQ.icl b/files/practicum/StdQ.icl
index 84ff69e..9883f91 100644
--- a/files/practicum/StdQ.icl
+++ b/files/practicum/StdQ.icl
@@ -2,4 +2,4 @@ implementation module StdQ
import StdEnv
-:: Q = ...
+:: Q = ... // maak deze type definitie af
diff --git a/files/practicum/StdSet.icl b/files/practicum/StdSet.icl
index 6cad7f1..b152f37 100644
--- a/files/practicum/StdSet.icl
+++ b/files/practicum/StdSet.icl
@@ -1,25 +1,5 @@
-definition module StdSet
+implementation module StdSet
-import StdClass
+import StdEnv
:: Set a
-
-toSet :: [a] -> Set a | Eq a
-fromSet :: (Set a) -> [a]
-
-isEmptySet :: (Set a) -> Bool
-isDisjoint :: (Set a) (Set a) -> Bool | Eq a
-isSubset :: (Set a) (Set a) -> Bool | Eq a
-isStrictSubset :: (Set a) (Set a) -> Bool | Eq a
-memberOfSet :: a (Set a) -> Bool | Eq a
-union :: (Set a) (Set a) -> Set a | Eq a
-intersection :: (Set a) (Set a) -> Set a | Eq a
-nrOfElements :: (Set a) -> Int
-without :: (Set a) (Set a) -> Set a | Eq a
-
-product :: (Set a) (Set b) -> Set (a,b)
-
-instance zero (Set a)
-instance == (Set a) | Eq a
-
-powerSet :: (Set a) -> Set (Set a)
diff --git a/files/practicum/StdSortList.icl b/files/practicum/StdSortList.icl
index 5621887..20acaf7 100644
--- a/files/practicum/StdSortList.icl
+++ b/files/practicum/StdSortList.icl
@@ -2,4 +2,4 @@ implementation module StdSortList
import StdEnv
-:: SortList a
+:: SortList a = ... // maak deze type definitie af (mag ook een synoniem type zijn, maar gebruik dan :== in plaats van =)
diff --git a/files/practicum/StdStack.icl b/files/practicum/StdStack.icl
index f8583d5..4b3a1f8 100644
--- a/files/practicum/StdStack.icl
+++ b/files/practicum/StdStack.icl
@@ -2,7 +2,7 @@ implementation module StdStack
import StdEnv
-:: Stack a
+:: Stack a = ... // maak deze type definitie af (mag ook een synoniem type zijn, maar gebruik dan :== in plaats van =)
Start = ( "s0 = newStack = ", s0,'\n'
, "s1 = push 1 s0 = ", s1,'\n'
diff --git a/files/practicum/StdStateMonad.dcl b/files/practicum/StdStateMonad.dcl
new file mode 100644
index 0000000..a825dbc
--- /dev/null
+++ b/files/practicum/StdStateMonad.dcl
@@ -0,0 +1,11 @@
+definition module StdStateMonad
+
+import StdMonad
+
+:: ST s a
+
+instance return (ST s)
+instance >>= (ST s)
+
+mkST :: (s -> *(a,s)) -> ST s a
+unST :: (ST s a) -> s -> *(a, s)
diff --git a/files/practicum/StdStateMonad.icl b/files/practicum/StdStateMonad.icl
new file mode 100644
index 0000000..527ac5c
--- /dev/null
+++ b/files/practicum/StdStateMonad.icl
@@ -0,0 +1,16 @@
+implementation module StdStateMonad
+
+import StdMonad
+
+:: ST s a = ST (s -> (a, s))
+
+instance return (ST s) where return x = ST (\w = (x, w))
+instance >>= (ST s) where >>= (ST f) g = ST (\w = let (a, w1) = f w
+ in unST (g a) w1
+ )
+
+mkST :: (s -> (a,s)) -> ST s a
+mkST f = ST f
+
+unST :: (ST s a) -> s -> (a, s)
+unST (ST f) = f