3 First, import what we need.
7 from joy.joy import run
8 from joy.library import initialize
9 from joy.utils.stack import stack_to_string
10 from joy.utils.pretty_print import TracePrinter
13 Define a dictionary, an initial stack, and two helper functions to run Joy code and print results for us.
22 print(stack_to_string(run(text, S, D)[0]))
27 run(text, S, D, tp.viewer)
31 ### Run some simple programs
51 A `viewer` records each step of the evaluation of a Joy program. The `TracePrinter` has a facility for printing out a trace of the evaluation, one line per step. Each step is aligned to the current interpreter position, signified by a period separating the stack on the left from the pending expression ("continuation") on the right. I find these traces beautiful, like a kind of art.
72 45 30 • 1 [tuck modulus dup 0 >] loop pop
73 45 30 1 • [tuck modulus dup 0 >] loop pop
74 45 30 1 [tuck modulus dup 0 >] • loop pop
75 45 30 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
76 30 45 30 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
77 30 15 • dup 0 > [tuck modulus dup 0 >] loop pop
78 30 15 15 • 0 > [tuck modulus dup 0 >] loop pop
79 30 15 15 0 • > [tuck modulus dup 0 >] loop pop
80 30 15 True • [tuck modulus dup 0 >] loop pop
81 30 15 True [tuck modulus dup 0 >] • loop pop
82 30 15 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
83 15 30 15 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
84 15 0 • dup 0 > [tuck modulus dup 0 >] loop pop
85 15 0 0 • 0 > [tuck modulus dup 0 >] loop pop
86 15 0 0 0 • > [tuck modulus dup 0 >] loop pop
87 15 0 False • [tuck modulus dup 0 >] loop pop
88 15 0 False [tuck modulus dup 0 >] • loop pop
93 Here's a longer trace.
103 96 27 • 1 [tuck modulus dup 0 >] loop pop
104 96 27 1 • [tuck modulus dup 0 >] loop pop
105 96 27 1 [tuck modulus dup 0 >] • loop pop
106 96 27 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
107 27 96 27 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
108 27 15 • dup 0 > [tuck modulus dup 0 >] loop pop
109 27 15 15 • 0 > [tuck modulus dup 0 >] loop pop
110 27 15 15 0 • > [tuck modulus dup 0 >] loop pop
111 27 15 True • [tuck modulus dup 0 >] loop pop
112 27 15 True [tuck modulus dup 0 >] • loop pop
113 27 15 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
114 15 27 15 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
115 15 12 • dup 0 > [tuck modulus dup 0 >] loop pop
116 15 12 12 • 0 > [tuck modulus dup 0 >] loop pop
117 15 12 12 0 • > [tuck modulus dup 0 >] loop pop
118 15 12 True • [tuck modulus dup 0 >] loop pop
119 15 12 True [tuck modulus dup 0 >] • loop pop
120 15 12 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
121 12 15 12 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
122 12 3 • dup 0 > [tuck modulus dup 0 >] loop pop
123 12 3 3 • 0 > [tuck modulus dup 0 >] loop pop
124 12 3 3 0 • > [tuck modulus dup 0 >] loop pop
125 12 3 True • [tuck modulus dup 0 >] loop pop
126 12 3 True [tuck modulus dup 0 >] • loop pop
127 12 3 • tuck modulus dup 0 > [tuck modulus dup 0 >] loop pop
128 3 12 3 • modulus dup 0 > [tuck modulus dup 0 >] loop pop
129 3 0 • dup 0 > [tuck modulus dup 0 >] loop pop
130 3 0 0 • 0 > [tuck modulus dup 0 >] loop pop
131 3 0 0 0 • > [tuck modulus dup 0 >] loop pop
132 3 0 False • [tuck modulus dup 0 >] loop pop
133 3 0 False [tuck modulus dup 0 >] • loop pop