OSDN Git Service

show_stack in case you close the stack window.
[joypy/Thun.git] / docs / 1._Basic_Use_of_Joy_in_a_Notebook.md
1 ### Preamble
2
3 First, import what we need.
4
5
6 ```python
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
11 ```
12
13 Define a dictionary, an initial stack, and two helper functions to run Joy code and print results for us.
14
15
16 ```python
17 D = initialize()
18 S = ()
19
20
21 def J(text):
22     print stack_to_string(run(text, S, D)[0])
23
24
25 def V(text):
26     tp = TracePrinter()
27     run(text, S, D, tp.viewer)
28     tp.print_()
29 ```
30
31 ### Run some simple programs
32
33
34 ```python
35 J('23 18 +')
36 ```
37
38     41
39
40
41
42 ```python
43 J('45 30 gcd')
44 ```
45
46     15
47
48
49 ### With Viewer
50
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.
52
53
54 ```python
55 V('23 18 +')
56 ```
57
58           . 23 18 +
59        23 . 18 +
60     23 18 . +
61        41 . 
62
63
64
65 ```python
66 V('45 30 gcd')
67 ```
68
69                                       . 45 30 gcd
70                                    45 . 30 gcd
71                                 45 30 . gcd
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
89                                  15 0 . pop
90                                    15 . 
91
92
93 Here's a longer trace.
94
95
96 ```python
97 V('96 27 gcd')
98 ```
99
100                                       . 96 27 gcd
101                                    96 . 27 gcd
102                                 96 27 . gcd
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
134                                   3 0 . pop
135                                     3 . 
136
137
138
139 ```python
140
141 ```