updated practicum files
authorMart Lubbers <mart@martlubbers.net>
Fri, 24 Apr 2015 07:10:46 +0000 (09:10 +0200)
committerMart Lubbers <mart@martlubbers.net>
Fri, 24 Apr 2015 07:10:46 +0000 (09:10 +0200)
16 files changed:
files/practicum/GetallenRaden.icl [new file with mode: 0644]
files/practicum/Origami.icl
files/practicum/StdDynSet.dcl [new file with mode: 0644]
files/practicum/StdDynSet.icl [new file with mode: 0644]
files/practicum/StdIOMonad.dcl [new file with mode: 0644]
files/practicum/StdIOMonad.icl [new file with mode: 0644]
files/practicum/StdListMonad.dcl [new file with mode: 0644]
files/practicum/StdListMonad.icl [new file with mode: 0644]
files/practicum/StdMaybeMonad.dcl [new file with mode: 0644]
files/practicum/StdMaybeMonad.icl [new file with mode: 0644]
files/practicum/StdQ.icl
files/practicum/StdSet.icl
files/practicum/StdSortList.icl
files/practicum/StdStack.icl
files/practicum/StdStateMonad.dcl [new file with mode: 0644]
files/practicum/StdStateMonad.icl [new file with mode: 0644]

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