done except that tuple map2 crashes
authorMart Lubbers <mart@martlubbers.net>
Wed, 23 Sep 2015 08:31:26 +0000 (10:31 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 23 Sep 2015 08:31:26 +0000 (10:31 +0200)
a3/mart/Makefile [new file with mode: 0644]
a3/mart/iTasksTest.prj
a3/mart/skeleton3a.icl
a3/mart/skeleton3a_wt.icl
a3/mart/skeleton3b.icl

diff --git a/a3/mart/Makefile b/a3/mart/Makefile
new file mode 100644 (file)
index 0000000..0e68e12
--- /dev/null
@@ -0,0 +1,21 @@
+CLEANEXES:=skeleton3a skeleton3b skeleton3a_wt
+ITASKSPRJS:=iTasksTest.exe
+CLM:=clm
+CPM:=cpm
+CLMFLAGS:=-IL ../lib/StdLib -IL ../lib/Generics
+
+all: $(CLEANEXES) $(ITASKSPRJS)
+
+%.exe: %.prj
+       $(CPM) project $< build
+
+%: %.icl
+       $(CLM) $(CLMFLAGS) $(basename $<) -o $@
+
+clean:
+       $(RM) -r \
+               $(CLEANEXES) \
+               $(addsuffix .exe,$(basename $(ITASKSPRJS))) \
+               Clean\ System\ Files \
+               sapl \
+               $(addsuffix -data,$(basename $(ITASKSPRJS)))
index df6ac2a..b1da31f 100644 (file)
@@ -2,7 +2,7 @@ Version: 1.4
 Global
        ProjectRoot:    .
        Target: iTasks
-       Exec:   {Project}/test.exe
+       Exec:   {Project}/iTasksTest.exe
        CodeGen
                CheckStacks:    False
                CheckIndexes:   True
index b741436..e96cd96 100644 (file)
@@ -246,7 +246,7 @@ instance map2 (,) where
 Start = (\r
        map1 fac aTree,\r
        map1 fac aList,\r
-       map2 fac fac (aList, aTree),\r
+//     map2 fac fac (aList, aTree),\r
        map1 (\x.(x, fac x)) aList\r
        )\r
        where\r
index 2e893ec..91025af 100644 (file)
@@ -1,4 +1,4 @@
-module skeleton3a\r
+module skeleton3a_wt\r
 \r
 /*\r
  Advanced Programming.\r
@@ -215,3 +215,5 @@ instance eq2 EITHER where
 \r
 instance eq0 [a] | eq0 a where eq0 l m = eq1 eq0 l m\r
 instance eq1 [] where eq1 f l m = eq2 (eq1 eq0) (eq1 (eq2 f (eq1 f))) (fromList l) (fromList m)\r
+\r
+Start = "Hi"\r
index 5753ddc..a0675f9 100644 (file)
@@ -16,6 +16,7 @@ generic show_ a :: a [String] -> [String]
 \r
 show_{|Int|}  i c = [toString i:c]\r
 show_{|Bool|} b c = [toString b:c]\r
+show_{|UNIT|} _ c = c\r
 \r
 show a = show_{|*|} a []\r
 \r
@@ -48,8 +49,54 @@ test x
                Just (y,[])     = x === y\r
                _                       = False\r
 \r
-/**************** End Prelude, add all new code below this line *************************/\r
-\r
-//------------------ tests --------------\r
-\r
-Start = and [test b \\ b <- [False, True]]\r
+/***** End Prelude, add all new code below this line *************************/\r
+//Show stuff\r
+show_{|OBJECT|} f (OBJECT x) c = f x c\r
+show_{|CONS of {gcd_name, gcd_arity}|} f (CONS x) c\r
+| gcd_arity == 0 = [gcd_name:f x c]\r
+| otherwise = ["(":gcd_name:f x [")":c]]\r
+show_{|PAIR|} f1 f2 (PAIR x1 x2) c = f1 x1 (f2 x2 c)\r
+show_{|EITHER|} f _ (LEFT x) c = f x c\r
+show_{|EITHER|} _ f (RIGHT x) c = f x c\r
+show_{|(,)|} f1 f2 (x1, x2) c = ["("] ++ f1 x1 [",":f2 x2 c]++[")"]\r
+\r
+derive show_ T, [], Color, Tree\r
+\r
+//Parse stuff (monads would make this more neat)\r
+parse{|Int|} [i:r] = Just (toInt i, r)\r
+parse{|Int|} _ = Nothing\r
+parse{|UNIT|} r = Just (UNIT, r)\r
+parse{|OBJECT|} f r = case f r of\r
+       Just (x, r) = Just (OBJECT x, r)\r
+       _ = Nothing\r
+parse{|CONS of {gcd_name, gcd_arity}|} f r\r
+| gcd_arity == 0 = case r of\r
+       [gcd_name:r] = case f r of\r
+               Just (x, r) = Just (CONS x, r)\r
+               _ = Nothing\r
+       _ = Nothing\r
+| otherwise = case r of\r
+       ["(",gcd_name:r] = case f r of\r
+               Just (x, r) = Just (CONS x, r % (0, (length r) - 2))\r
+               _ = Nothing\r
+       _ = Nothing\r
+parse{|PAIR|} f1 f2 r = case f1 r of\r
+       Just (x1, r) = case f2 r of\r
+               Just (x2, r) = Just (PAIR x1 x2, r)\r
+               _ = Nothing\r
+       _ = Nothing\r
+parse{|EITHER|} f1 f2 r = case f2 r of\r
+       Just (x, r) = Just (RIGHT x, r)\r
+       _ = case f1 r of\r
+               Just (x, r) = Just (LEFT x, r)\r
+               _ = Nothing\r
+parse{|(,)|} f1 f2 ["(":r] = case f1 r of\r
+       Just (x1, r) = case r of\r
+               [",":r] = case f2 r of\r
+                       Just (x2, r) = Just ((x1, x2), r % (0, (length r) - 2))\r
+                       _ = Nothing\r
+               _ = Nothing\r
+       _ = Nothing\r
+\r
+derive parse T, [], Color, Tree\r
+Start = show 42\r