Mercurial > repos > icfp2013
annotate src/bv.tp @ 40:1cadb591eef1
Fix bug that was causing the solver to not find certain matches
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 11 Aug 2013 00:37:34 -0700 |
parents | b00904b36aca |
children | 96b2fcb746bf |
rev | line source |
---|---|
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
2 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
3 program <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
4 _input <- 0u64 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
5 _acc <- 0u64 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
6 _val <- 0u64 |
33 | 7 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
8 _zero <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
9 string <- { "0" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
10 eval <- { 0u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
11 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
12 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
13 isTerminal? <- { true } |
33 | 14 constant? <- { true } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 } |
33 | 16 _accInputNode <- _zero |
17 _foldInputNode <- _zero | |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
19 _one <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
20 string <- { "1" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
21 eval <- { 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
22 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
23 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
24 isTerminal? <- { true } |
33 | 25 constant? <- { true } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
28 _inputNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
29 string <- { "input" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
30 eval <- { _input } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
31 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
32 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
33 isTerminal? <- { true } |
33 | 34 constant? <- { false } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
35 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
36 _accNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
37 string <- { "acc" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
38 eval <- { _acc } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
39 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
40 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
41 isTerminal? <- { true } |
33 | 42 constant? <- { _accInputNode constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
43 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
44 _valNode <- #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
45 string <- { "val" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
46 eval <- { _val } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
47 operators <- { 0 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
48 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
49 isTerminal? <- { true } |
33 | 50 constant? <- { _foldInputNode constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
51 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
52 _opPlus <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
53 _opAnd <- 2 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
54 _opOr <- 4 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
55 _opXor <- 8 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
56 _opNot <- 0x10 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
57 _opShl1 <- 0x20 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
58 _opShr1 <- 0x40 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
59 _opShr4 <- 0x80 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
60 _opShr16 <- 0x100 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
61 _opIf0 <- 0x200 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
62 _opFold <- 0x400 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
63 _opTfold <- 0x800 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
64 _maskRemoveFold <- 0x3FF |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
65 _names <- dict linear |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
66 _names set: "plus" _opPlus |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
67 _names set: "and" _opAnd |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
68 _names set: "xor" _opXor |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
69 _names set: "or" _opOr |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
70 _names set: "not" _opNot |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
71 _names set: "shl1" _opShl1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
72 _names set: "shr1" _opShr1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
73 _names set: "shr4" _opShr4 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
74 _names set: "shr16" _opShr16 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
75 _names set: "if0" _opIf0 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
76 _names set: "fold" _opFold |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
77 _names set: "tfold" _opTfold |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
78 _memo <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
79 _memoFoldBody <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
80 _memoFoldParam <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
81 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
82 plus <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
83 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
84 string <- { "(plus " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
85 eval <- { (eval: left) + (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
86 operators <- { _opPlus or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
87 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
88 isTerminal? <- { false } |
33 | 89 constant? <- { (left constant?) && (right constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
90 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
92 zero <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
93 _zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
94 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
96 one <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
97 _one |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
100 opAnd <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
101 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
102 string <- { "(and " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
103 eval <- { (eval: left) and (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
104 operators <- { _opAnd or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
105 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
106 isTerminal? <- { false } |
33 | 107 constant? <- { |
108 if: (left constant?) { | |
109 if: (right constant?) { | |
110 true | |
111 } else: { | |
112 if: (string: left) = "0" { | |
113 true | |
114 } else: { | |
115 false | |
116 } | |
117 } | |
118 } else: { | |
119 if: (right constant?) { | |
120 if: (string: right) = "0" { | |
121 true | |
122 } else: { | |
123 false | |
124 } | |
125 } else: { | |
126 false | |
127 } | |
128 } | |
129 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
130 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
131 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
132 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
133 opOr <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
134 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
135 string <- { "(or " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
136 eval <- { (eval: left) or (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
137 operators <- { _opOr or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
138 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
139 isTerminal? <- { false } |
33 | 140 constant? <- { (left constant?) && (right constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
141 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
143 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
144 opXor <- :left right { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
145 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
146 string <- { "(xor " . (string: left) . " " . (string: right) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
147 eval <- { (eval: left) xor (eval: right)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
148 operators <- { _opXor or (left operators) or (right operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
149 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
150 isTerminal? <- { false } |
33 | 151 constant? <- { |
152 if: (left constant?) && (right constant?) { | |
153 true | |
154 } else: { | |
155 (string: left) = (string: right) | |
156 } | |
157 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
158 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
159 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
160 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
161 opNot <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
162 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
163 string <- { "(not " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
164 eval <- { (eval: exp) xor -1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
165 operators <- { _opNot or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
166 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
167 isTerminal? <- { false } |
33 | 168 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
169 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
170 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
172 shl1 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
173 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
174 string <- { "(shl1 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
175 eval <- { lshift: (eval: exp) by: 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
176 operators <- { _opShl1 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
177 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
178 isTerminal? <- { false } |
33 | 179 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
180 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
181 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
182 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
183 shr1 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
184 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
185 string <- { "(shr1 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
186 eval <- { rshift: (eval: exp) by: 1u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
187 operators <- { _opShr1 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
188 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
189 isTerminal? <- { false } |
33 | 190 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
191 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
193 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
194 shr4 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
195 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
196 string <- { "(shr4 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
197 eval <- { rshift: (eval: exp) by: 4u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
198 operators <- { _opShr4 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
199 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
200 isTerminal? <- { false } |
33 | 201 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
202 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
203 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
204 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
205 shr16 <- :exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
206 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
207 string <- { "(shr16 " . (string: exp) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
208 eval <- { rshift: (eval: exp) by: 16u64 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
209 operators <- { _opShr16 or (exp operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
210 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
211 isTerminal? <- { false } |
33 | 212 constant? <- { exp constant? } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
213 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
214 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
215 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
216 input <- { _inputNode } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
217 acc <- { _accNode } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
218 val <- { _valNode } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
220 if0:then:else <- :exp ifzero :ifnotzero { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
221 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
222 string <- { "(if0 " . (string: exp) . " " . (string: ifzero) . " " . (string: ifnotzero) . ")" } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
223 eval <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
224 if: (eval: exp) = 0u64 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
225 eval: ifzero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
226 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
227 eval: ifnotzero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
228 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
229 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
230 operators <- { _opIf0 or (exp operators) or (ifzero operators) or (ifnotzero operators)} |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
231 isTfold? <- { false } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
232 isTerminal? <- { false } |
33 | 233 constant? <- { (exp constant?) && (ifzero constant?) && (ifnotzero constant?) } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
234 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
237 fold:with:startingAt <- :toFold :fun :startAcc { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
238 #{ |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
239 string <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
240 "(fold " . (string: toFold) . " " . (string: startAcc) . " (lambda (val acc) " . (string: fun) . "))" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
241 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
242 eval <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
243 _acc <- (eval: startAcc) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
244 source <- (eval: toFold) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
245 //parser doesn''t currently like vertical whitespace in arays so |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
246 //this needs to be on a single line until that bug is fixed |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
247 vals <- #[source and 255u64 (rshift: source by: 8u64) and 255u64 (rshift: source by: 16u64) and 255u64 (rshift: source by: 24u64) and 255u64 (rshift: source by: 32u64) and 255u64 (rshift: source by: 40u64) and 255u64 (rshift: source by: 48u64) and 255u64 (rshift: source by: 56u64) and 255u64] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
248 foreach: vals :idx cur { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
249 _val <- cur |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
250 _acc <- (eval: fun) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
251 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
252 _acc |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
253 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
254 operators <- { _opFold or (toFold operators) or (fun operators) or (startAcc operators) } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
255 isTfold? <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
256 (toFold isTerminal?) && (startAcc isTerminal?) && (toFold string) = "input" && (startAcc string) = "0" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
257 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
258 isTerminal? <- { false } |
33 | 259 constant? <- { |
260 _accInputNode <- startAcc | |
261 _foldInputNode <- toFold | |
262 fun constant? | |
263 } | |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
264 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
266 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
267 run <- :in { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
268 _input <- in |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
269 eval: root |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
270 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
271 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
272 root <- _zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
273 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
274 string <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
275 "(lambda (input) " . (string: root) . ")" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
276 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
277 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
278 gentestprog <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
279 root <- if0: (opAnd: input one) then: ( |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
280 plus: (opOr: input (shl1: one)) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
281 ) else: ( |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
282 opXor: input (shr16: input) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
283 ) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
284 self |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
285 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
286 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
287 exampleprog <- { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
288 root <- fold: input with: (opOr: val acc) startingAt: zero |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
289 self |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
290 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
292 //TODO: memoize this to improve runtime for large n |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
293 allOfSize:inFold? <- :n :infold? { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
294 memo <- if: infold? = 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
295 _memoFoldBody |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
296 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
297 if: infold? = 1 && n > 4 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
298 _memoFoldParam |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
299 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
300 _memo |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
301 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
302 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
303 if: n - 1 < (memo length) { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
304 print: "Memo hit: " . (string: n) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
305 memo get: (n - 1) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
306 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
307 if: n = 1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
308 res <- #[one zero input] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
309 if: infold? = 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
310 res append: acc |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
311 res append: val |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
312 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
313 print: "Saving at memo index: " . (string: (memo length)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
314 memo append: res |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
315 res |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 } else: { |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
317 res <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
318 foreach: (allOfSize: n - 1 inFold?: infold?) :idx exp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
319 res append: (opNot: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
320 res append: (shl1: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
321 res append: (shr1: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
322 res append: (shr4: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
323 res append: (shr16: exp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
324 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
325 if: n > 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
326 numLeft <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
327 argTotal <- n - 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
328 while: { numLeft < argTotal } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
329 numRight <- argTotal - numLeft |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
330 choicesRight <- (allOfSize: numRight inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
331 foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
332 foreach: choicesRight :idx rightExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
333 res append: (opAnd: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
334 res append: (opOr: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
335 res append: (opXor: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
336 res append: (plus: leftExp rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
337 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
338 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
339 numLeft <- numLeft + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
340 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
341 if: n > 3 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
342 numLeft <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
343 limitLeft <- n - 2 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
344 while: { numLeft < limitLeft } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
345 numMid <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
346 limitMid <- n - (1 + numLeft) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
347 while: { numMid < limitMid } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
348 numRight <- n - (1 + numLeft + numMid) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
349 choicesRight <- (allOfSize: numRight inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
350 choicesMid <- (allOfSize: numMid inFold?: infold?) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
351 foreach: (allOfSize: numLeft inFold?: infold?) :idx leftExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
352 foreach: choicesMid :idx midExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
353 foreach: choicesRight :idx rightExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
354 res append: (if0: leftExp then: midExp else: rightExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
355 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
356 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
357 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
358 numMid <- numMid + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
359 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
360 numLeft <- numLeft + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
361 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
362 if: n > 4 && infold? = 0 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
363 numSeq <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
364 limitSeq <- n - 3 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
365 while: { numSeq < limitSeq } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
366 numFun <- 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
367 limitFun <- n - (2 + numSeq) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
368 while: { numFun < limitFun } do: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
369 numStart <- n - (2 + numSeq + numFun) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
370 choicesStart <- (allOfSize: numStart inFold?: 1) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
371 choicesFun <- (allOfSize: numFun inFold?: 2) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
372 foreach: (allOfSize: numSeq inFold?: 1) :idx seqExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
373 foreach: choicesFun :idx funExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
374 foreach: choicesStart :idx startExp { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
375 res append: (fold: seqExp with: funExp startingAt: startExp) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
376 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
377 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
378 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
379 numFun <- numFun + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
380 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
381 numSeq <- numSeq + 1 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
382 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
383 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
384 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
385 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
386 print: "Saving " . (string: n) . " at memo index: " . (string: (memo length)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
387 memo append: res |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
388 res |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
389 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
390 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
391 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
392 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
393 allOfSize <- :n { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
394 allOfSize: (n - 1) inFold?: 0 |
27
655d5b19333d
Add memoization support to program generator
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
395 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
396 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
397 filterTrees <- :trees strops { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
398 filtered <- #[] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
399 ops <- strops fold: 0 with: :acc el { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
400 acc or (_names get: el withDefault: 0) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
401 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
402 if: (ops and _opTfold) > 0 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
403 foreach: trees :idx tree { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
404 if: (tree isTfold?) { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
405 if: (tree operators) and _maskRemoveFold = ops and _maskRemoveFold { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
406 filtered append: tree |
9
0ccebdbc3e80
Add support for generating programs that contain fold. Make the desired program size a command line argument.
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
407 } |
0ccebdbc3e80
Add support for generating programs that contain fold. Make the desired program size a command line argument.
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
408 } |
8
3f0172ceab81
Add support for generating programs with if0, thus allowing us to generate all programs up to size 5.
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
409 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
410 } else: { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
411 foreach: trees :idx tree { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
412 if: (tree operators) = ops { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
413 filtered append: tree |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
414 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
415 } |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
416 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
417 filtered |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
418 } |
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
419 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
420 } |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
421 |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
422 test <- :prog { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
423 print: (string: prog) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
424 print: "Operators: " . (hex: ((prog root) operators)) . "\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
425 if: ((prog root) isTfold?) { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
426 print: "TFold!\n" |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
427 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
428 //parser doesn''t currently like vertical whitespace in arays so |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
429 //this needs to be on a single line until that bug is fixed |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
430 vals <- #[0u64 1u64 2u64 3u64 4u64 5u64 6u64 7u64 8u64 9u64 10u64 11u64 12u64 13u64 14u64 15u64 0x30001u64 0x50015u64 (lshift: 0x11223344u64 by: 32u64) or 0x55667788u64] |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
431 foreach: vals :idx val { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
432 print: "p(0x" . (hex: val) . ") = 0x" . (hex: (prog run: val)) . "\n" |
7
301f16245955
Add support for generating all programs up to size 3 inclusive
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
433 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
434 } |
28
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
435 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
436 main <- :args { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
437 //test: (program gentestprog) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
438 //test: (program exampleprog) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
439 size <- 3 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
440 if: (args length) > 1 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
441 size <- int32: (args get: 1) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
442 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
443 if: size >= 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
444 prog <- program |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
445 trees <- (prog allOfSize: size) |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
446 if: (args length) > 2 { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
447 ops <- (args get: 2) splitOn: "," |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
448 trees <- prog filterTrees: trees ops |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
449 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
450 foreach: trees :idx tree { |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
451 prog root! tree |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
452 test: prog |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
453 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
454 } |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
455 0 |
6384e577842d
Add code for filtering a program set based on the operators used
Mike Pavone <pavone@retrodev.com>
parents:
27
diff
changeset
|
456 } |
3
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
457 } |
dfc5f00c94bc
Initial evaluator implementation. fold is currently missing but other ops are present and seem to work
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
458 } |