git @ Cat's Eye Technologies Burro / db20c75
Improve visualization, update tests. Chris Pressey 7 months ago
2 changed file(s) with 46 addition(s) and 46 deletion(s). Raw diff Collapse all Expand all
4646 | >/
4747 | ++++
4848 | >)<
49 = State [4]<[5] [0]<[] True
49 = State{ tape=(... [4] 5 ...), stack=(... [0] ...), halt=True }
5050
5151 Try it with -1:
5252
5656 | >/
5757 | ++++
5858 | >)<
59 = State [4]<[3] [0]<[] True
59 = State{ tape=(... [4] 3 ...), stack=(... [0] ...), halt=True }
6060
6161 Try it with 1:
6262
6666 | >/
6767 | ++++
6868 | >)<
69 = State [4]<[1] [0]<[] True
69 = State{ tape=(... [4] 1 ...), stack=(... [0] ...), halt=True }
7070
7171 Try it with 3:
7272
7676 | >/
7777 | ++++
7878 | >)<
79 = State [2]<[-1] [0]<[] True
79 = State{ tape=(... [2] -1 ...), stack=(... [0] ...), halt=True }
8080
8181 Try it with 5:
8282
8686 | >/
8787 | ++++
8888 | >)<
89 = State [2]<[-3] [0]<[] True
89 = State{ tape=(... [2] -3 ...), stack=(... [0] ...), halt=True }
9090
9191 Try it with 7:
9292
9696 | >/
9797 | ++++
9898 | >)<
99 = State [2]<[-5] [0]<[] True
99 = State{ tape=(... [2] -5 ...), stack=(... [0] ...), halt=True }
100100
101101 Note also that the work value is not available to us inside the branch,
102102 because it's on the stack, not on the tape. A trace makes this more obvious.
112112 | >/
113113 | ++++
114114 | >)<
115 = State [0]<[] [0]<[] True ::: +
116 = State [1]<[] [0]<[] True ::: -
117 = State [0]<[] [0]<[] True ::: -
118 = State [-1]<[] [0]<[] True ::: (++>/++++>)
119 = State [0]<[] [1,0]<[] True ::: +
120 = State [1]<[] [1,0]<[] True ::: +
121 = State [2]<[] [1,0]<[] True ::: +
122 = State [3]<[] [1,0]<[] True ::: +
123 = State [4]<[] [1,0]<[] True ::: >
124 = State [4,1]<[] [0]<[] True ::: <
125 = State [4]<[1] [0]<[] True
126
127 | +++++
128 | --(
129 | ++
130 | >/
131 | ++++
132 | >)<
133 = State [0]<[] [0]<[] True ::: +
134 = State [1]<[] [0]<[] True ::: +
135 = State [2]<[] [0]<[] True ::: +
136 = State [3]<[] [0]<[] True ::: +
137 = State [4]<[] [0]<[] True ::: +
138 = State [5]<[] [0]<[] True ::: -
139 = State [4]<[] [0]<[] True ::: -
140 = State [3]<[] [0]<[] True ::: (++>/++++>)
141 = State [0]<[] [-3,0]<[] True ::: +
142 = State [1]<[] [-3,0]<[] True ::: +
143 = State [2]<[] [-3,0]<[] True ::: >
144 = State [2,-3]<[] [0]<[] True ::: <
145 = State [2]<[-3] [0]<[] True
115 = State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: +
116 = State{ tape=(... [1] ...), stack=(... [0] ...), halt=True } ::: -
117 = State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: -
118 = State{ tape=(... [-1] ...), stack=(... [0] ...), halt=True } ::: (++>/++++>)
119 = State{ tape=(... [0] ...), stack=(... 1 [0] ...), halt=True } ::: +
120 = State{ tape=(... [1] ...), stack=(... 1 [0] ...), halt=True } ::: +
121 = State{ tape=(... [2] ...), stack=(... 1 [0] ...), halt=True } ::: +
122 = State{ tape=(... [3] ...), stack=(... 1 [0] ...), halt=True } ::: +
123 = State{ tape=(... [4] ...), stack=(... 1 [0] ...), halt=True } ::: >
124 = State{ tape=(... 4 [1] ...), stack=(... [0] ...), halt=True } ::: <
125 = State{ tape=(... [4] 1 ...), stack=(... [0] ...), halt=True }
126
127 | +++++
128 | --(
129 | ++
130 | >/
131 | ++++
132 | >)<
133 = State{ tape=(... [0] ...), stack=(... [0] ...), halt=True } ::: +
134 = State{ tape=(... [1] ...), stack=(... [0] ...), halt=True } ::: +
135 = State{ tape=(... [2] ...), stack=(... [0] ...), halt=True } ::: +
136 = State{ tape=(... [3] ...), stack=(... [0] ...), halt=True } ::: +
137 = State{ tape=(... [4] ...), stack=(... [0] ...), halt=True } ::: +
138 = State{ tape=(... [5] ...), stack=(... [0] ...), halt=True } ::: -
139 = State{ tape=(... [4] ...), stack=(... [0] ...), halt=True } ::: -
140 = State{ tape=(... [3] ...), stack=(... [0] ...), halt=True } ::: (++>/++++>)
141 = State{ tape=(... [0] ...), stack=(... -3 [0] ...), halt=True } ::: +
142 = State{ tape=(... [1] ...), stack=(... -3 [0] ...), halt=True } ::: +
143 = State{ tape=(... [2] ...), stack=(... -3 [0] ...), halt=True } ::: >
144 = State{ tape=(... 2 [-3] ...), stack=(... [0] ...), halt=True } ::: <
145 = State{ tape=(... [2] -3 ...), stack=(... [0] ...), halt=True }
146146
147147 But it *is* available to us after the branch, so we can make another test.
148148
163163 | >/
164164 | ++++
165165 | >)--(/)<
166 = State [4]<[1] [0]<[] True
166 = State{ tape=(... [4] 1 ...), stack=(... [0] ...), halt=True }
167167
168168 Try it with 3:
169169
173173 | >/
174174 | ++++
175175 | >)--(/)<
176 = State [2]<[3] [0]<[] True
176 = State{ tape=(... [2] 3 ...), stack=(... [0] ...), halt=True }
177177
178178 Try it with 5:
179179
183183 | >/
184184 | ++++
185185 | >)--(/)<
186 = State [2]<[5] [0]<[] True
186 = State{ tape=(... [2] 5 ...), stack=(... [0] ...), halt=True }
187187
188188 As you can see, after the test, the contents of the current tape cell
189189 are the same as the value we originally tested against.
206206 | >/
207207 | ++++
208208 | >)----(/)<
209 = State [4]<[3] [0]<[] True
209 = State{ tape=(... [4] 3 ...), stack=(... [0] ...), halt=True }
210210
211211 Try it with 5:
212212
216216 | >/
217217 | ++++
218218 | >)----(/)<
219 = State [2]<[5] [0]<[] True
219 = State{ tape=(... [2] 5 ...), stack=(... [0] ...), halt=True }
220220
221221 The next step will be combining these conditionals so that we can build a test
222222 that tests for multiple cases.
332332 | >>
333333 | >/
334334 | >)----(/)<<<
335 = State [9]<[0,0,1] [0]<[] True
335 = State{ tape=(... [9] 0 0 1 ...), stack=(... [0] ...), halt=True }
336336
337337 Try it with 3:
338338
355355 | >>
356356 | >/
357357 | >)----(/)<<<
358 = State [13]<[0,0,3] [0]<[] True
358 = State{ tape=(... [13] 0 0 3 ...), stack=(... [0] ...), halt=True }
359359
360360 Try it with 5:
361361
378378 | >>
379379 | >/
380380 | >)----(/)<<<
381 = State [7]<[0,0,5] [0]<[] True
381 = State{ tape=(... [7] 0 0 5 ...), stack=(... [0] ...), halt=True }
293293 >
294294 > instance Show State where
295295 > show (State t s h) =
296 > "State{ tape=(" ++ (show t) ++ "), stack=(" ++ (show s) ++ "), halt=" ++ (show h) ++ "}"
296 > "State{ tape=(" ++ (show t) ++ "), stack=(" ++ (show s) ++ "), halt=" ++ (show h) ++ " }"
297297 >
298298 > newstate = State (tape [0]) (tape [0]) True
299299