laatste kleine aanpassingen
[sec1415.git] / semantic_functions.icl
1 implementation module semantic_functions
2
3 import StdInt, StdList
4
5 d :: [Int] -> [Int]
6 d [] = []
7 d [a:rest] = rest
8
9 e :: Int [Int] -> [Int]
10 e a [] = [a]
11 e a b = [a] ++ b
12
13 add :: [Int] -> [Int]
14 add [] = []
15 add [a] = [a]
16 add [a:b:rest] = [b+a:rest]
17
18 sub :: [Int] -> [Int]
19 sub [] = []
20 sub [a] = [a]
21 sub [a:b:rest] = [b-a:rest]
22
23 mul :: [Int] -> [Int]
24 mul [] = []
25 mul [a] = [a]
26 mul [a:b:rest] = [b*a:rest]
27
28 div :: [Int] -> [Int]
29 div [] = []
30 div [a] = [a]
31 div [a:b:rest] = [b/a:rest]
32
33 modc :: [Int] -> [Int]
34 modc[] = []
35 modc[a] = [a]
36 modc[a:b:rest] = [modulo b a:rest]
37
38 dup :: [Int] -> [Int]
39 dup[] = []
40 dup[a:rest] = [a:a:rest]
41
42 notc :: [Int] -> [Int]
43 notc[] = []
44 notc[0:rest] = [1:rest]
45 notc[_:rest] = [0:rest]
46
47 gre :: [Int] -> [Int]
48 gre[] = []
49 gre[a] = [a]
50 gre[a:b:rest]
51 |a >= b = [0:rest]
52 |otherwise = [1:rest]
53
54 roll :: [Int] -> [Int]
55 roll [] = []
56 roll [a] = [a]
57 roll [a:b:rest]
58 |modulo a b == 0 = rest
59 |b <= 0 = rest
60 |b > length rest = rest
61 |a == 1 = roll1 [b:rest]
62 |a > 0 = roll ([a-1] ++ [b] ++ roll1 [b:rest])
63 |a < 0 = roll ([modulo a b] ++ [b:rest])
64
65 roll1 :: [Int] -> [Int]
66 roll1 [1:rest] = rest
67 roll1 [b:c:d:rest] = [d] ++ roll1[b-1:c:rest]
68
69 //outnum_so :: stack_output stack -> stack_output
70 outnum_so :: [Int] [Int] -> [Int]
71 outnum_so so [] = so
72 outnum_so so [a:rest] = add_to_s a so
73
74 //innum_s :: stack_input stack -> stack
75 innum_s :: [Int] [Int] -> [Int]
76 innum_s [] _ = []
77 innum_s [a:rest] s = add_to_s a s
78
79 //help functions
80 modulo :: Int Int -> Int
81 modulo a b
82 |a<0 = modulo (a+b) b
83 |a<b = a
84 |otherwise = modulo (a-b) b
85
86 add_to_s :: a [a] -> [a]
87 add_to_s a [] = [a]
88 add_to_s a b = b ++ [a]
89
90 Start = vijffaculteit
91
92 eenfaculteit = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2[1,1])))))))))))))))
93
94 tweefaculteit = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2 tweefaculteit1)))))))))))))))
95 tweefaculteit1 = roll(e 1(e 2(d(roll(e 2(e 3(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(d(roll(e 1(e 2(mul(roll(e 1(e 4(dup(roll(e 2(e 3(dup tweefaculteit2))))))))))))))))))))))))))))
96 tweefaculteit2 = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(e 1 (e 2 [])))))))))))))))))
97
98 vijffaculteit = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2 vijffaculteit1)))))))))))))))
99 vijffaculteit1 = roll(e 1(e 2(d(roll(e 2(e 3(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(d(roll(e 1(e 2(mul(roll(e 1(e 4(dup(roll(e 2(e 3(dup vijffaculteit2))))))))))))))))))))))))))))
100 vijffaculteit2 = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2 vijffaculteit3)))))))))))))))
101 vijffaculteit3 = roll(e 1(e 2(d(roll(e 2(e 3(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(d(roll(e 1(e 2(mul(roll(e 1(e 4(dup(roll(e 2(e 3(dup vijffaculteit4))))))))))))))))))))))))))))
102 vijffaculteit4 = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2 vijffaculteit5)))))))))))))))
103 vijffaculteit5 = roll(e 1(e 2(d(roll(e 2(e 3(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(d(roll(e 1(e 2(mul(roll(e 1(e 4(dup(roll(e 2(e 3(dup vijffaculteit6))))))))))))))))))))))))))))
104 vijffaculteit6 = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2 vijffaculteit7)))))))))))))))
105 vijffaculteit7 = roll(e 1(e 2(d(roll(e 2(e 3(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(d(roll(e 1(e 2(mul(roll(e 1(e 4(dup(roll(e 2(e 3(dup [1,5]))))))))))))))))))))))))))))
106 //[1,5] is the outcome of vijffaculteit8, but it won't run if not substituted
107 vijffaculteit8 = d(notc(gre(sub(e 1(e 1(notc(sub(e 1(roll(e 1(e 3(dup(roll(e 1(e 2(e 1 (e 5 [])))))))))))))))))
108