OSDN Git Service

Closes Ticket #40371 Bump version number to 0.3.0
[joypy/Thun.git] / docs / sphinx_docs / _build / html / notebooks / Zipper.html
1
2 <!DOCTYPE html>
3
4 <html>
5   <head>
6     <meta charset="utf-8" />
7     <title>Traversing Datastructures with Zippers &#8212; Thun 0.3.0 documentation</title>
8     <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
9     <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
10     <script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
11     <script src="../_static/jquery.js"></script>
12     <script src="../_static/underscore.js"></script>
13     <script src="../_static/doctools.js"></script>
14     <script src="../_static/language_data.js"></script>
15     <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
16     <link rel="index" title="Index" href="../genindex.html" />
17     <link rel="search" title="Search" href="../search.html" />
18     <link rel="next" title="The Blissful Elegance of Typing Joy" href="Types.html" />
19     <link rel="prev" title="Newton’s method" href="Newton-Raphson.html" />
20    
21   <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
22   
23   
24   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
25
26   </head><body>
27   
28
29     <div class="document">
30       <div class="documentwrapper">
31         <div class="bodywrapper">
32           
33
34           <div class="body" role="main">
35             
36   <div class="section" id="traversing-datastructures-with-zippers">
37 <h1>Traversing Datastructures with Zippers<a class="headerlink" href="#traversing-datastructures-with-zippers" title="Permalink to this headline">¶</a></h1>
38 <p>This notebook is about using the “zipper” with joy datastructures. See
39 the <a class="reference external" href="https://en.wikipedia.org/wiki/Zipper_%28data_structure%29">Zipper wikipedia
40 entry</a> or
41 the original paper: <a class="reference external" href="https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf">“FUNCTIONAL PEARL The Zipper” by Gérard
42 Huet</a></p>
43 <p>Given a datastructure on the stack we can navigate through it, modify
44 it, and rebuild it using the “zipper” technique.</p>
45 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">notebook_preamble</span> <span class="kn">import</span> <span class="n">J</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">define</span>
46 </pre></div>
47 </div>
48 <div class="section" id="trees">
49 <h2>Trees<a class="headerlink" href="#trees" title="Permalink to this headline">¶</a></h2>
50 <p>In Joypy there aren’t any complex datastructures, just ints, floats,
51 strings, Symbols (strings that are names of functions) and sequences
52 (aka lists, aka quoted literals, aka aggregates, etc…), but we can
53 build
54 <a class="reference external" href="https://en.wikipedia.org/wiki/Tree_%28data_structure%29">trees</a> out
55 of sequences.</p>
56 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1 [2 [3 4 25 6] 7] 8]&#39;</span><span class="p">)</span>
57 </pre></div>
58 </div>
59 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span>
60 </pre></div>
61 </div>
62 </div>
63 <div class="section" id="zipper-in-joy">
64 <h2>Zipper in Joy<a class="headerlink" href="#zipper-in-joy" title="Permalink to this headline">¶</a></h2>
65 <p>Zippers work by keeping track of the current item, the already-seen
66 items, and the yet-to-be seen items as you traverse a datastructure (the
67 datastructure used to keep track of these items is the zipper.)</p>
68 <p>In Joy we can do this with the following words:</p>
69 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">z</span><span class="o">-</span><span class="n">down</span> <span class="o">==</span> <span class="p">[]</span> <span class="n">swap</span> <span class="n">uncons</span> <span class="n">swap</span>
70 <span class="n">z</span><span class="o">-</span><span class="n">up</span> <span class="o">==</span> <span class="n">swons</span> <span class="n">swap</span> <span class="n">shunt</span>
71 <span class="n">z</span><span class="o">-</span><span class="n">right</span> <span class="o">==</span> <span class="p">[</span><span class="n">swons</span><span class="p">]</span> <span class="n">cons</span> <span class="n">dip</span> <span class="n">uncons</span> <span class="n">swap</span>
72 <span class="n">z</span><span class="o">-</span><span class="n">left</span> <span class="o">==</span> <span class="n">swons</span> <span class="p">[</span><span class="n">uncons</span> <span class="n">swap</span><span class="p">]</span> <span class="n">dip</span> <span class="n">swap</span>
73 </pre></div>
74 </div>
75 <p>Let’s use them to change 25 into 625. The first time a word is used I
76 show the trace so you can see how it works. If we were going to use
77 these a lot it would make sense to write Python versions for efficiency,
78 but see below.</p>
79 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;z-down == [] swap uncons swap&#39;</span><span class="p">)</span>
80 <span class="n">define</span><span class="p">(</span><span class="s1">&#39;z-up == swons swap shunt&#39;</span><span class="p">)</span>
81 <span class="n">define</span><span class="p">(</span><span class="s1">&#39;z-right == [swons] cons dip uncons swap&#39;</span><span class="p">)</span>
82 <span class="n">define</span><span class="p">(</span><span class="s1">&#39;z-left == swons [uncons swap] dip swap&#39;</span><span class="p">)</span>
83 </pre></div>
84 </div>
85 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[1 [2 [3 4 25 6] 7] 8] z-down&#39;</span><span class="p">)</span>
86 </pre></div>
87 </div>
88 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                          <span class="o">.</span> <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">z</span><span class="o">-</span><span class="n">down</span>
89    <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">z</span><span class="o">-</span><span class="n">down</span>
90    <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="p">[]</span> <span class="n">swap</span> <span class="n">uncons</span> <span class="n">swap</span>
91 <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">swap</span> <span class="n">uncons</span> <span class="n">swap</span>
92 <span class="p">[]</span> <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">uncons</span> <span class="n">swap</span>
93 <span class="p">[]</span> <span class="mi">1</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">swap</span>
94 <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="o">.</span>
95 </pre></div>
96 </div>
97 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[] [[2 [3 4 25 6] 7] 8] 1 z-right&#39;</span><span class="p">)</span>
98 </pre></div>
99 </div>
100 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                                  <span class="o">.</span> <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="n">z</span><span class="o">-</span><span class="n">right</span>
101                                <span class="p">[]</span> <span class="o">.</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="n">z</span><span class="o">-</span><span class="n">right</span>
102           <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="mi">1</span> <span class="n">z</span><span class="o">-</span><span class="n">right</span>
103         <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="o">.</span> <span class="n">z</span><span class="o">-</span><span class="n">right</span>
104         <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="n">swons</span><span class="p">]</span> <span class="n">cons</span> <span class="n">dip</span> <span class="n">uncons</span> <span class="n">swap</span>
105 <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="mi">1</span> <span class="p">[</span><span class="n">swons</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">dip</span> <span class="n">uncons</span> <span class="n">swap</span>
106 <span class="p">[]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">1</span> <span class="n">swons</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="n">uncons</span> <span class="n">swap</span>
107                                <span class="p">[]</span> <span class="o">.</span> <span class="mi">1</span> <span class="n">swons</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">uncons</span> <span class="n">swap</span>
108                              <span class="p">[]</span> <span class="mi">1</span> <span class="o">.</span> <span class="n">swons</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">uncons</span> <span class="n">swap</span>
109                              <span class="p">[]</span> <span class="mi">1</span> <span class="o">.</span> <span class="n">swap</span> <span class="n">cons</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">uncons</span> <span class="n">swap</span>
110                              <span class="mi">1</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">cons</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">uncons</span> <span class="n">swap</span>
111                               <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="n">uncons</span> <span class="n">swap</span>
112          <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">uncons</span> <span class="n">swap</span>
113          <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">swap</span>
114          <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="o">.</span>
115 </pre></div>
116 </div>
117 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2 [3 4 25 6] 7] z-down&#39;</span><span class="p">)</span>
118 </pre></div>
119 </div>
120 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[]</span> <span class="p">[[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">2</span>
121 </pre></div>
122 </div>
123 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [] [[3 4 25 6] 7] 2 z-right&#39;</span><span class="p">)</span>
124 </pre></div>
125 </div>
126 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span>
127 </pre></div>
128 </div>
129 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [3 4 25 6] z-down&#39;</span><span class="p">)</span>
130 </pre></div>
131 </div>
132 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">3</span>
133 </pre></div>
134 </div>
135 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [] [4 25 6] 3 z-right&#39;</span><span class="p">)</span>
136 </pre></div>
137 </div>
138 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">4</span>
139 </pre></div>
140 </div>
141 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [3] [25 6] 4 z-right&#39;</span><span class="p">)</span>
142 </pre></div>
143 </div>
144 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">25</span>
145 </pre></div>
146 </div>
147 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [4 3] [6] 25 sqr&#39;</span><span class="p">)</span>
148 </pre></div>
149 </div>
150 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span>
151 </pre></div>
152 </div>
153 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [4 3] [6] 625 z-up&#39;</span><span class="p">)</span>
154 </pre></div>
155 </div>
156 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                              <span class="o">.</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
157                           <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
158                       <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
159                   <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
160               <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
161         <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
162     <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">.</span> <span class="mi">625</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
163 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="o">.</span> <span class="n">z</span><span class="o">-</span><span class="n">up</span>
164 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="o">.</span> <span class="n">swons</span> <span class="n">swap</span> <span class="n">shunt</span>
165 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="mi">625</span> <span class="o">.</span> <span class="n">swap</span> <span class="n">cons</span> <span class="n">swap</span> <span class="n">shunt</span>
166 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">625</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">swap</span> <span class="n">shunt</span>
167 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="o">.</span> <span class="n">swap</span> <span class="n">shunt</span>
168 <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span> <span class="mi">3</span><span class="p">]</span> <span class="o">.</span> <span class="n">shunt</span>
169   <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="o">.</span>
170 </pre></div>
171 </div>
172 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2] [7] [3 4 625 6] z-up&#39;</span><span class="p">)</span>
173 </pre></div>
174 </div>
175 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span>
176 </pre></div>
177 </div>
178 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1] [8] [2 [3 4 625 6] 7] z-up&#39;</span><span class="p">)</span>
179 </pre></div>
180 </div>
181 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span>
182 </pre></div>
183 </div>
184 </div>
185 <div class="section" id="dip-and-infra">
186 <h2><code class="docutils literal notranslate"><span class="pre">dip</span></code> and <code class="docutils literal notranslate"><span class="pre">infra</span></code><a class="headerlink" href="#dip-and-infra" title="Permalink to this headline">¶</a></h2>
187 <p>In Joy we have the <code class="docutils literal notranslate"><span class="pre">dip</span></code> and <code class="docutils literal notranslate"><span class="pre">infra</span></code> combinators which can “target”
188 or “address” any particular item in a Joy tree structure.</p>
189 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[1 [2 [3 4 25 6] 7] 8] [[[[[[sqr] dipd] infra] dip] infra] dip] infra&#39;</span><span class="p">)</span>
190 </pre></div>
191 </div>
192 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                                                                <span class="o">.</span> <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="p">[[[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span>
193                                          <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span>
194 <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="p">[[[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="o">.</span> <span class="n">infra</span>
195                                            <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span> <span class="p">[]</span> <span class="n">swaack</span>
196         <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">1</span> <span class="p">[[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="p">[]</span> <span class="n">swaack</span>
197                                              <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
198                   <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="p">[[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="o">.</span> <span class="n">infra</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
199                                                  <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">2</span> <span class="o">.</span> <span class="p">[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
200                             <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">2</span> <span class="p">[[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
201                                                    <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="n">infra</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
202                                       <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">25</span> <span class="mi">6</span><span class="p">]</span> <span class="p">[[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span><span class="p">]</span> <span class="o">.</span> <span class="n">infra</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
203                                                        <span class="mi">6</span> <span class="mi">25</span> <span class="mi">4</span> <span class="mi">3</span> <span class="o">.</span> <span class="p">[</span><span class="n">sqr</span><span class="p">]</span> <span class="n">dipd</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
204                                                  <span class="mi">6</span> <span class="mi">25</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="n">sqr</span><span class="p">]</span> <span class="o">.</span> <span class="n">dipd</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
205                                                            <span class="mi">6</span> <span class="mi">25</span> <span class="o">.</span> <span class="n">sqr</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
206                                                            <span class="mi">6</span> <span class="mi">25</span> <span class="o">.</span> <span class="n">dup</span> <span class="n">mul</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
207                                                         <span class="mi">6</span> <span class="mi">25</span> <span class="mi">25</span> <span class="o">.</span> <span class="n">mul</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
208                                                           <span class="mi">6</span> <span class="mi">625</span> <span class="o">.</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
209                                                         <span class="mi">6</span> <span class="mi">625</span> <span class="mi">4</span> <span class="o">.</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
210                                                       <span class="mi">6</span> <span class="mi">625</span> <span class="mi">4</span> <span class="mi">3</span> <span class="o">.</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
211                                                   <span class="mi">6</span> <span class="mi">625</span> <span class="mi">4</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="o">.</span> <span class="n">swaack</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
212                                                   <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="o">.</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
213                                                 <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">2</span> <span class="o">.</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
214                                             <span class="mi">7</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">8</span><span class="p">]</span> <span class="o">.</span> <span class="n">swaack</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
215                                             <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="o">.</span> <span class="mi">1</span> <span class="p">[]</span> <span class="n">swaack</span>
216                                           <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[]</span> <span class="n">swaack</span>
217                                        <span class="mi">8</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">1</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">swaack</span>
218                                         <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span> <span class="o">.</span>
219 </pre></div>
220 </div>
221 <p>If you read the trace carefully you’ll see that about half of it is the
222 <code class="docutils literal notranslate"><span class="pre">dip</span></code> and <code class="docutils literal notranslate"><span class="pre">infra</span></code> combinators de-quoting programs and “digging” into
223 the subject datastructure. Instead of maintaining temporary results on
224 the stack they are pushed into the pending expression (continuation).
225 When <code class="docutils literal notranslate"><span class="pre">sqr</span></code> has run the rest of the pending expression rebuilds the
226 datastructure.</p>
227 </div>
228 <div class="section" id="z">
229 <h2><code class="docutils literal notranslate"><span class="pre">Z</span></code><a class="headerlink" href="#z" title="Permalink to this headline">¶</a></h2>
230 <p>Imagine a function <code class="docutils literal notranslate"><span class="pre">Z</span></code> that accepts a sequence of <code class="docutils literal notranslate"><span class="pre">dip</span></code> and
231 <code class="docutils literal notranslate"><span class="pre">infra</span></code> combinators, a quoted program <code class="docutils literal notranslate"><span class="pre">[Q]</span></code>, and a datastructure to
232 work on. It would effectively execute the quoted program as if it had
233 been embedded in a nested series of quoted programs, e.g.:</p>
234 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>   <span class="p">[</span><span class="o">...</span><span class="p">]</span> <span class="p">[</span><span class="n">Q</span><span class="p">]</span> <span class="p">[</span><span class="n">dip</span> <span class="n">dip</span> <span class="n">infra</span> <span class="n">dip</span> <span class="n">infra</span> <span class="n">dip</span> <span class="n">infra</span><span class="p">]</span> <span class="n">Z</span>
235 <span class="o">-------------------------------------------------------------</span>
236    <span class="p">[</span><span class="o">...</span><span class="p">]</span> <span class="p">[[[[[[[</span><span class="n">Q</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span>
237 </pre></div>
238 </div>
239 <p>The <code class="docutils literal notranslate"><span class="pre">Z</span></code> function isn’t hard to make.</p>
240 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;Z == [[] cons cons] step i&#39;</span><span class="p">)</span>
241 </pre></div>
242 </div>
243 <p>Here it is in action in a simplified scenario.</p>
244 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;1 [2 3 4] Z&#39;</span><span class="p">)</span>
245 </pre></div>
246 </div>
247 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                             <span class="o">.</span> <span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="n">Z</span>
248                            <span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="n">Z</span>
249                    <span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="n">Z</span>
250                    <span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
251     <span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">step</span> <span class="n">i</span>
252           <span class="mi">1</span> <span class="mi">2</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
253                          <span class="mi">1</span> <span class="mi">2</span> <span class="o">.</span> <span class="p">[]</span> <span class="n">cons</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
254                       <span class="mi">1</span> <span class="mi">2</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
255                        <span class="mi">1</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
256                        <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
257                  <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
258   <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">step</span> <span class="n">i</span>
259       <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
260                      <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span> <span class="o">.</span> <span class="p">[]</span> <span class="n">cons</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
261                   <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
262                    <span class="p">[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
263                    <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
264                <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="n">step</span> <span class="n">i</span>
265 <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">step</span> <span class="n">i</span>
266   <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span> <span class="p">[[]</span> <span class="n">cons</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="n">i</span>
267                  <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span> <span class="o">.</span> <span class="p">[]</span> <span class="n">cons</span> <span class="n">cons</span> <span class="n">i</span>
268               <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span> <span class="p">[]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">cons</span> <span class="n">i</span>
269                <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">i</span>
270                <span class="p">[[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span>
271                              <span class="o">.</span> <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span>
272                    <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="o">.</span> <span class="mi">4</span>
273                  <span class="p">[[</span><span class="mi">1</span> <span class="mi">2</span><span class="p">]</span> <span class="mi">3</span><span class="p">]</span> <span class="mi">4</span> <span class="o">.</span>
274 </pre></div>
275 </div>
276 <p>And here it is doing the main thing.</p>
277 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[1 [2 [3 4 25 6] 7] 8] [sqr] [dip dip infra dip infra dip infra] Z&#39;</span><span class="p">)</span>
278 </pre></div>
279 </div>
280 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">4</span> <span class="mi">625</span> <span class="mi">6</span><span class="p">]</span> <span class="mi">7</span><span class="p">]</span> <span class="mi">8</span><span class="p">]</span>
281 </pre></div>
282 </div>
283 </div>
284 <div class="section" id="addressing">
285 <h2>Addressing<a class="headerlink" href="#addressing" title="Permalink to this headline">¶</a></h2>
286 <p>Because we are only using two combinators we could replace the list with
287 a string made from only two characters.</p>
288 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>   <span class="p">[</span><span class="o">...</span><span class="p">]</span> <span class="p">[</span><span class="n">Q</span><span class="p">]</span> <span class="s1">&#39;ddididi&#39;</span> <span class="n">Zstr</span>
289 <span class="o">-------------------------------------------------------------</span>
290    <span class="p">[</span><span class="o">...</span><span class="p">]</span> <span class="p">[[[[[[[</span><span class="n">Q</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span><span class="p">]</span> <span class="n">dip</span><span class="p">]</span> <span class="n">infra</span>
291 </pre></div>
292 </div>
293 <p>The string can be considered a name or address for an item in the
294 subject datastructure.</p>
295 </div>
296 <div class="section" id="determining-the-right-path-for-an-item-in-a-tree">
297 <h2>Determining the right “path” for an item in a tree.<a class="headerlink" href="#determining-the-right-path-for-an-item-in-a-tree" title="Permalink to this headline">¶</a></h2>
298 <p>It’s easy to read off (in reverse) the right sequence of “d” and “i”
299 from the subject datastructure:</p>
300 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>[ n [ n [ n n x ...
301 i d i d i d d Bingo!
302 </pre></div>
303 </div>
304 </div>
305 </div>
306
307
308           </div>
309           
310         </div>
311       </div>
312       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
313         <div class="sphinxsidebarwrapper">
314 <h1 class="logo"><a href="../index.html">Thun</a></h1>
315
316
317
318
319
320
321
322
323 <h3>Navigation</h3>
324 <ul class="current">
325 <li class="toctree-l1"><a class="reference internal" href="Intro.html">Thun: Joy in Python</a></li>
326 <li class="toctree-l1"><a class="reference internal" href="../joy.html">Joy Interpreter</a></li>
327 <li class="toctree-l1"><a class="reference internal" href="../stack.html">Stack or Quote or Sequence or List…</a></li>
328 <li class="toctree-l1"><a class="reference internal" href="../parser.html">Parsing Text into Joy Expressions</a></li>
329 <li class="toctree-l1"><a class="reference internal" href="../pretty.html">Tracing Joy Execution</a></li>
330 <li class="toctree-l1"><a class="reference internal" href="../library.html">Function Reference</a></li>
331 <li class="toctree-l1"><a class="reference internal" href="../lib.html">Functions Grouped by, er, Function with Examples</a></li>
332 <li class="toctree-l1"><a class="reference internal" href="../types.html">Type Inference of Joy Expressions</a></li>
333 <li class="toctree-l1 current"><a class="reference internal" href="index.html">Essays about Programming in Joy</a><ul class="current">
334 <li class="toctree-l2"><a class="reference internal" href="Developing.html">Developing a Program in Joy</a></li>
335 <li class="toctree-l2"><a class="reference internal" href="Quadratic.html">Quadratic formula</a></li>
336 <li class="toctree-l2"><a class="reference internal" href="Replacing.html">Replacing Functions in the Dictionary</a></li>
337 <li class="toctree-l2"><a class="reference internal" href="Recursion_Combinators.html">Recursion Combinators</a></li>
338 <li class="toctree-l2"><a class="reference internal" href="Ordered_Binary_Trees.html">Treating Trees I: Ordered Binary Trees</a></li>
339 <li class="toctree-l2"><a class="reference internal" href="Treestep.html">Treating Trees II: <code class="docutils literal notranslate"><span class="pre">treestep</span></code></a></li>
340 <li class="toctree-l2"><a class="reference internal" href="Generator_Programs.html">Using <code class="docutils literal notranslate"><span class="pre">x</span></code> to Generate Values</a></li>
341 <li class="toctree-l2"><a class="reference internal" href="Newton-Raphson.html">Newton’s method</a></li>
342 <li class="toctree-l2 current"><a class="current reference internal" href="#">Traversing Datastructures with Zippers</a></li>
343 <li class="toctree-l2"><a class="reference internal" href="Types.html">The Blissful Elegance of Typing Joy</a></li>
344 <li class="toctree-l2"><a class="reference internal" href="TypeChecking.html">Type Checking</a></li>
345 <li class="toctree-l2"><a class="reference internal" href="NoUpdates.html">No Updates</a></li>
346 <li class="toctree-l2"><a class="reference internal" href="Categorical.html">Categorical Programming</a></li>
347 <li class="toctree-l2"><a class="reference internal" href="The_Four_Operations.html">The Four Fundamental Operations of Definite Action</a></li>
348 <li class="toctree-l2"><a class="reference internal" href="Derivatives_of_Regular_Expressions.html">∂RE</a></li>
349 </ul>
350 </li>
351 </ul>
352
353 <div class="relations">
354 <h3>Related Topics</h3>
355 <ul>
356   <li><a href="../index.html">Documentation overview</a><ul>
357   <li><a href="index.html">Essays about Programming in Joy</a><ul>
358       <li>Previous: <a href="Newton-Raphson.html" title="previous chapter">Newton’s method</a></li>
359       <li>Next: <a href="Types.html" title="next chapter">The Blissful Elegance of Typing Joy</a></li>
360   </ul></li>
361   </ul></li>
362 </ul>
363 </div>
364 <div id="searchbox" style="display: none" role="search">
365   <h3 id="searchlabel">Quick search</h3>
366     <div class="searchformwrapper">
367     <form class="search" action="../search.html" method="get">
368       <input type="text" name="q" aria-labelledby="searchlabel" />
369       <input type="submit" value="Go" />
370     </form>
371     </div>
372 </div>
373 <script>$('#searchbox').show(0);</script>
374
375
376
377
378
379
380
381
382         </div>
383       </div>
384       <div class="clearer"></div>
385     </div>
386     <div class="footer" role="contentinfo">
387 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">
388 <img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" />
389 </a>
390 <br />
391 <span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Thun Documentation</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://joypy.osdn.io/" property="cc:attributionName" rel="cc:attributionURL">Simon Forman</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.<br />Based on a work at <a xmlns:dct="http://purl.org/dc/terms/" href="https://osdn.net/projects/joypy/" rel="dct:source">https://osdn.net/projects/joypy/</a>.
392       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.2.
393     </div>
394
395   </body>
396 </html>