--- /dev/null
+CLEANEXES:=skeleton11
+CLM:=clm
+CLMFLAGS:=-IL ../lib/StdLib -IL ../lib/Generics
+
+all: $(CLEANEXES)
+
+%.exe: %.prj
+ $(CPM) project $< build
+
+%: %.icl
+ $(CLM) $(CLMFLAGS) $(basename $<) -o $@
+
+clean:
+ $(RM) -r $(CLEANEXES) Clean\ System\ Files
--- /dev/null
+module skeleton11
+
+import StdEnv
+
+:: Prog :== [Instr]
+
+:: Instr = Write Expr
+
+:: Expr = Int Int
+ | Plus Expr Expr
+ | Times Expr Expr
+ | Read
+
+possibleResults :: [Prog] -> [Int]
+possibleResults x = produce (map (map (\(Write x).eval x)) x) 0
+
+produce :: [[Int->Int]] Int -> [Int]
+produce x i
+| all (isEmpty) x = [i]
+= flatten [produce (updateAt idx ys x) (y i)\\(idx, [y:ys])<-zip2 [0..] x]
+
+eval :: Expr Int -> Int
+eval (Int i) s = i
+eval (Plus e1 e2) s = eval e1 s + eval e2 s
+eval (Times e1 e2) s = eval e1 s * eval e2 s
+eval Read s = s
+
+
+prog0 = [Write (Int 12), Write (Plus Read (Int 1))]
+prog1 = [Write (Times Read (Int 2))]
+test0 = [prog0]
+test1 = [prog0, prog1]
+
+Start = (
+ possibleResults test0,
+ possibleResults test1)