4 First, import what we need.
8 from joy.joy import run
9 from joy.library import initialize
10 from joy.utils.stack import stack_to_string
11 from joy.utils.pretty_print import TracePrinter
13 Define a dictionary, an initial stack, and two helper functions to run
14 Joy code and print results for us.
23 print(stack_to_string(run(text, S, D)[0]))
28 run(text, S, D, tp.viewer)
31 Run some simple programs
32 ~~~~~~~~~~~~~~~~~~~~~~~~
57 A ``viewer`` records each step of the evaluation of a Joy program. The
58 ``TracePrinter`` has a facility for printing out a trace of the
59 evaluation, one line per step. Each step is aligned to the current
60 interpreter position, signified by a period separating the stack on the
61 left from the pending expression ("continuation") on the right. I find
62 these traces beautiful, like a kind of art.
87 45 30 • 1 [tuck modulus dup 0 >] loop pop
88 45 30 1 • [tuck modulus dup 0 >] loop pop
89 45 30 1 [tuck modulus dup 0 >] • loop pop
90 45 30 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
91 30 45 30 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
92 30 15 • dup 0 > [tuck modulus dup 0 >] loop pop
93 30 15 15 • 0 > [tuck modulus dup 0 >] loop pop
94 30 15 15 0 • > [tuck modulus dup 0 >] loop pop
95 30 15 True • [tuck modulus dup 0 >] loop pop
96 30 15 True [tuck modulus dup 0 >] • loop pop
97 30 15 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
98 15 30 15 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
99 15 0 • dup 0 > [tuck modulus dup 0 >] loop pop
100 15 0 0 • 0 > [tuck modulus dup 0 >] loop pop
101 15 0 0 0 • > [tuck modulus dup 0 >] loop pop
102 15 0 False • [tuck modulus dup 0 >] loop pop
103 15 0 False [tuck modulus dup 0 >] • loop pop
108 Here's a longer trace.
120 96 27 • 1 [tuck modulus dup 0 >] loop pop
121 96 27 1 • [tuck modulus dup 0 >] loop pop
122 96 27 1 [tuck modulus dup 0 >] • loop pop
123 96 27 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
124 27 96 27 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
125 27 15 • dup 0 > [tuck modulus dup 0 >] loop pop
126 27 15 15 • 0 > [tuck modulus dup 0 >] loop pop
127 27 15 15 0 • > [tuck modulus dup 0 >] loop pop
128 27 15 True • [tuck modulus dup 0 >] loop pop
129 27 15 True [tuck modulus dup 0 >] • loop pop
130 27 15 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
131 15 27 15 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
132 15 12 • dup 0 > [tuck modulus dup 0 >] loop pop
133 15 12 12 • 0 > [tuck modulus dup 0 >] loop pop
134 15 12 12 0 • > [tuck modulus dup 0 >] loop pop
135 15 12 True • [tuck modulus dup 0 >] loop pop
136 15 12 True [tuck modulus dup 0 >] • loop pop
137 15 12 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
138 12 15 12 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
139 12 3 • dup 0 > [tuck modulus dup 0 >] loop pop
140 12 3 3 • 0 > [tuck modulus dup 0 >] loop pop
141 12 3 3 0 • > [tuck modulus dup 0 >] loop pop
142 12 3 True • [tuck modulus dup 0 >] loop pop
143 12 3 True [tuck modulus dup 0 >] • loop pop
144 12 3 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
145 3 12 3 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
146 3 0 • dup 0 > [tuck modulus dup 0 >] loop pop
147 3 0 0 • 0 > [tuck modulus dup 0 >] loop pop
148 3 0 0 0 • > [tuck modulus dup 0 >] loop pop
149 3 0 False • [tuck modulus dup 0 >] loop pop
150 3 0 False [tuck modulus dup 0 >] • loop pop