OSDN Git Service

Bleah.
[joypy/Thun.git] / docs / sphinx_docs / _build / html / notebooks / Generator_Programs.html
1
2 <!DOCTYPE html>
3
4 <html>
5   <head>
6     <meta charset="utf-8" />
7     <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
8
9     <title>Using x to Generate Values &#8212; Thun 0.4.1 documentation</title>
10     <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
11     <link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
12     <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
13     <script src="../_static/jquery.js"></script>
14     <script src="../_static/underscore.js"></script>
15     <script src="../_static/doctools.js"></script>
16     <link rel="index" title="Index" href="../genindex.html" />
17     <link rel="search" title="Search" href="../search.html" />
18     <link rel="next" title="Newton’s method" href="Newton-Raphson.html" />
19     <link rel="prev" title="Treating Trees II: treestep" href="Treestep.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   <section id="using-x-to-generate-values">
37 <h1>Using <code class="docutils literal notranslate"><span class="pre">x</span></code> to Generate Values<a class="headerlink" href="#using-x-to-generate-values" title="Permalink to this headline">¶</a></h1>
38 <p>Cf. jp-reprod.html</p>
39 <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>
40 </pre></div>
41 </div>
42 <p>Consider the <code class="docutils literal notranslate"><span class="pre">x</span></code> combinator:</p>
43 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">x</span> <span class="o">==</span> <span class="n">dup</span> <span class="n">i</span>
44 </pre></div>
45 </div>
46 <p>We can apply it to a quoted program consisting of some value <code class="docutils literal notranslate"><span class="pre">a</span></code> and
47 some function <code class="docutils literal notranslate"><span class="pre">B</span></code>:</p>
48 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span> <span class="n">x</span>
49 <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span> <span class="n">a</span> <span class="n">B</span>
50 </pre></div>
51 </div>
52 <p>Let <code class="docutils literal notranslate"><span class="pre">B</span></code> function <code class="docutils literal notranslate"><span class="pre">swap</span></code> the <code class="docutils literal notranslate"><span class="pre">a</span></code> with the quote and run some
53 function <code class="docutils literal notranslate"><span class="pre">C</span></code> on it to generate a new value <code class="docutils literal notranslate"><span class="pre">b</span></code>:</p>
54 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">B</span> <span class="o">==</span> <span class="n">swap</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">dip</span>
55
56 <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span> <span class="n">a</span> <span class="n">B</span>
57 <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span> <span class="n">a</span> <span class="n">swap</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">dip</span>
58 <span class="n">a</span> <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span>      <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">dip</span>
59 <span class="n">a</span> <span class="n">C</span> <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span>
60 <span class="n">b</span> <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span>
61 </pre></div>
62 </div>
63 <p>Now discard the quoted <code class="docutils literal notranslate"><span class="pre">a</span></code> with <code class="docutils literal notranslate"><span class="pre">rest</span></code> then <code class="docutils literal notranslate"><span class="pre">cons</span></code> <code class="docutils literal notranslate"><span class="pre">b</span></code>:</p>
64 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">b</span> <span class="p">[</span><span class="n">a</span> <span class="n">B</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
65 <span class="n">b</span> <span class="p">[</span><span class="n">B</span><span class="p">]</span>        <span class="n">cons</span>
66 <span class="p">[</span><span class="n">b</span> <span class="n">B</span><span class="p">]</span>
67 </pre></div>
68 </div>
69 <p>Altogether, this is the definition of <code class="docutils literal notranslate"><span class="pre">B</span></code>:</p>
70 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">B</span> <span class="o">==</span> <span class="n">swap</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
71 </pre></div>
72 </div>
73 <p>We can make a generator for the Natural numbers (0, 1, 2, …) by using
74 <code class="docutils literal notranslate"><span class="pre">0</span></code> for <code class="docutils literal notranslate"><span class="pre">a</span></code> and <code class="docutils literal notranslate"><span class="pre">[dup</span> <span class="pre">++]</span></code> for <code class="docutils literal notranslate"><span class="pre">[C]</span></code>:</p>
75 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span>
76 </pre></div>
77 </div>
78 <p>Let’s try it:</p>
79 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[0 swap [dup ++] dip rest cons] x&#39;</span><span class="p">)</span>
80 </pre></div>
81 </div>
82 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                                           <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="n">x</span>
83            <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">x</span>
84            <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
85          <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="mi">0</span> <span class="o">.</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
86          <span class="mi">0</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
87 <span class="mi">0</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
88                                          <span class="mi">0</span> <span class="o">.</span> <span class="n">dup</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
89                                        <span class="mi">0</span> <span class="mi">0</span> <span class="o">.</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
90                                        <span class="mi">0</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
91        <span class="mi">0</span> <span class="mi">1</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">rest</span> <span class="n">cons</span>
92          <span class="mi">0</span> <span class="mi">1</span> <span class="p">[</span><span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span>
93          <span class="mi">0</span> <span class="p">[</span><span class="mi">1</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span><span class="p">]</span> <span class="o">.</span>
94 </pre></div>
95 </div>
96 <p>After one application of <code class="docutils literal notranslate"><span class="pre">x</span></code> the quoted program contains <code class="docutils literal notranslate"><span class="pre">1</span></code> and
97 <code class="docutils literal notranslate"><span class="pre">0</span></code> is below it on the stack.</p>
98 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[0 swap [dup ++] dip rest cons] x x x x x pop&#39;</span><span class="p">)</span>
99 </pre></div>
100 </div>
101 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span>
102 </pre></div>
103 </div>
104 <section id="direco">
105 <h2><code class="docutils literal notranslate"><span class="pre">direco</span></code><a class="headerlink" href="#direco" title="Permalink to this headline">¶</a></h2>
106 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;direco == dip rest cons&#39;</span><span class="p">)</span>
107 </pre></div>
108 </div>
109 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[0 swap [dup ++] direco] x&#39;</span><span class="p">)</span>
110 </pre></div>
111 </div>
112 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                                    <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">x</span>
113            <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span> <span class="n">x</span>
114            <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span>
115          <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="mi">0</span> <span class="o">.</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span>
116          <span class="mi">0</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span>
117 <span class="mi">0</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">direco</span>
118 <span class="mi">0</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
119                                   <span class="mi">0</span> <span class="o">.</span> <span class="n">dup</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
120                                 <span class="mi">0</span> <span class="mi">0</span> <span class="o">.</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
121                                 <span class="mi">0</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
122        <span class="mi">0</span> <span class="mi">1</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span> <span class="n">rest</span> <span class="n">cons</span>
123          <span class="mi">0</span> <span class="mi">1</span> <span class="p">[</span><span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span>
124          <span class="mi">0</span> <span class="p">[</span><span class="mi">1</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="o">.</span>
125 </pre></div>
126 </div>
127 </section>
128 <section id="making-generators">
129 <h2>Making Generators<a class="headerlink" href="#making-generators" title="Permalink to this headline">¶</a></h2>
130 <p>We want to define a function that accepts <code class="docutils literal notranslate"><span class="pre">a</span></code> and <code class="docutils literal notranslate"><span class="pre">[C]</span></code> and builds
131 our quoted program:</p>
132 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>         <span class="n">a</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">G</span>
133 <span class="o">-------------------------</span>
134    <span class="p">[</span><span class="n">a</span> <span class="n">swap</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
135 </pre></div>
136 </div>
137 <p>Working in reverse:</p>
138 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">a</span> <span class="n">swap</span>   <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">cons</span>
139 <span class="n">a</span> <span class="p">[</span><span class="n">swap</span>   <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">concat</span>
140 <span class="n">a</span> <span class="p">[</span><span class="n">swap</span><span class="p">]</span> <span class="p">[[</span><span class="n">C</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="n">swap</span>
141 <span class="n">a</span> <span class="p">[[</span><span class="n">C</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span> <span class="p">[</span><span class="n">swap</span><span class="p">]</span>
142 <span class="n">a</span> <span class="p">[</span><span class="n">C</span><span class="p">]</span> <span class="p">[</span><span class="n">direco</span><span class="p">]</span> <span class="n">cons</span> <span class="p">[</span><span class="n">swap</span><span class="p">]</span>
143 </pre></div>
144 </div>
145 <p>Reading from the bottom up:</p>
146 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">G</span> <span class="o">==</span> <span class="p">[</span><span class="n">direco</span><span class="p">]</span> <span class="n">cons</span> <span class="p">[</span><span class="n">swap</span><span class="p">]</span> <span class="n">swap</span> <span class="n">concat</span> <span class="n">cons</span>
147 <span class="n">G</span> <span class="o">==</span> <span class="p">[</span><span class="n">direco</span><span class="p">]</span> <span class="n">cons</span> <span class="p">[</span><span class="n">swap</span><span class="p">]</span> <span class="n">swoncat</span> <span class="n">cons</span>
148 </pre></div>
149 </div>
150 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;G == [direco] cons [swap] swoncat cons&#39;</span><span class="p">)</span>
151 </pre></div>
152 </div>
153 <p>Let’s try it out:</p>
154 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;0 [dup ++] G&#39;</span><span class="p">)</span>
155 </pre></div>
156 </div>
157 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
158 </pre></div>
159 </div>
160 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;0 [dup ++] G x x x pop&#39;</span><span class="p">)</span>
161 </pre></div>
162 </div>
163 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span>
164 </pre></div>
165 </div>
166 <section id="powers-of-2">
167 <h3>Powers of 2<a class="headerlink" href="#powers-of-2" title="Permalink to this headline">¶</a></h3>
168 <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 [dup 1 &lt;&lt;] G x x x x x x x x x pop&#39;</span><span class="p">)</span>
169 </pre></div>
170 </div>
171 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="mi">2</span> <span class="mi">4</span> <span class="mi">8</span> <span class="mi">16</span> <span class="mi">32</span> <span class="mi">64</span> <span class="mi">128</span> <span class="mi">256</span>
172 </pre></div>
173 </div>
174 </section>
175 <section id="x-times">
176 <h3><code class="docutils literal notranslate"><span class="pre">[x]</span> <span class="pre">times</span></code><a class="headerlink" href="#x-times" title="Permalink to this headline">¶</a></h3>
177 <p>If we have one of these quoted programs we can drive it using <code class="docutils literal notranslate"><span class="pre">times</span></code>
178 with the <code class="docutils literal notranslate"><span class="pre">x</span></code> combinator.</p>
179 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;23 [dup ++] G 5 [x] times&#39;</span><span class="p">)</span>
180 </pre></div>
181 </div>
182 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">23</span> <span class="mi">24</span> <span class="mi">25</span> <span class="mi">26</span> <span class="mi">27</span> <span class="p">[</span><span class="mi">28</span> <span class="n">swap</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
183 </pre></div>
184 </div>
185 </section>
186 </section>
187 <section id="generating-multiples-of-three-and-five">
188 <h2>Generating Multiples of Three and Five<a class="headerlink" href="#generating-multiples-of-three-and-five" title="Permalink to this headline">¶</a></h2>
189 <p>Look at the treatment of the Project Euler Problem One in the
190 “Developing a Program” notebook and you’ll see that we might be
191 interested in generating an endless cycle of:</p>
192 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span>
193 </pre></div>
194 </div>
195 <p>To do this we want to encode the numbers as pairs of bits in a single
196 int:</p>
197 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>    <span class="mi">3</span>  <span class="mi">2</span>  <span class="mi">1</span>  <span class="mi">3</span>  <span class="mi">1</span>  <span class="mi">2</span>  <span class="mi">3</span>
198 <span class="mi">0</span><span class="n">b</span> <span class="mi">11</span> <span class="mi">10</span> <span class="mi">01</span> <span class="mi">11</span> <span class="mi">01</span> <span class="mi">10</span> <span class="mi">11</span> <span class="o">==</span> <span class="mi">14811</span>
199 </pre></div>
200 </div>
201 <p>And pick them off by masking with 3 (binary 11) and then shifting the
202 int right two bits.</p>
203 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;PE1.1 == dup [3 &amp;] dip 2 &gt;&gt;&#39;</span><span class="p">)</span>
204 </pre></div>
205 </div>
206 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;14811 PE1.1&#39;</span><span class="p">)</span>
207 </pre></div>
208 </div>
209 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                  <span class="o">.</span> <span class="mi">14811</span> <span class="n">PE1</span><span class="o">.</span><span class="mi">1</span>
210             <span class="mi">14811</span> <span class="o">.</span> <span class="n">PE1</span><span class="o">.</span><span class="mi">1</span>
211             <span class="mi">14811</span> <span class="o">.</span> <span class="n">dup</span> <span class="p">[</span><span class="mi">3</span> <span class="o">&amp;</span><span class="p">]</span> <span class="n">dip</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
212       <span class="mi">14811</span> <span class="mi">14811</span> <span class="o">.</span> <span class="p">[</span><span class="mi">3</span> <span class="o">&amp;</span><span class="p">]</span> <span class="n">dip</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
213 <span class="mi">14811</span> <span class="mi">14811</span> <span class="p">[</span><span class="mi">3</span> <span class="o">&amp;</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
214             <span class="mi">14811</span> <span class="o">.</span> <span class="mi">3</span> <span class="o">&amp;</span> <span class="mi">14811</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
215           <span class="mi">14811</span> <span class="mi">3</span> <span class="o">.</span> <span class="o">&amp;</span> <span class="mi">14811</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
216                 <span class="mi">3</span> <span class="o">.</span> <span class="mi">14811</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
217           <span class="mi">3</span> <span class="mi">14811</span> <span class="o">.</span> <span class="mi">2</span> <span class="o">&gt;&gt;</span>
218         <span class="mi">3</span> <span class="mi">14811</span> <span class="mi">2</span> <span class="o">.</span> <span class="o">&gt;&gt;</span>
219            <span class="mi">3</span> <span class="mi">3702</span> <span class="o">.</span>
220 </pre></div>
221 </div>
222 <p>If we plug <code class="docutils literal notranslate"><span class="pre">14811</span></code> and <code class="docutils literal notranslate"><span class="pre">[PE1.1]</span></code> into our generator form…</p>
223 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;14811 [PE1.1] G&#39;</span><span class="p">)</span>
224 </pre></div>
225 </div>
226 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">14811</span> <span class="n">swap</span> <span class="p">[</span><span class="n">PE1</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
227 </pre></div>
228 </div>
229 <p>…we get a generator that works for seven cycles before it reaches zero:</p>
230 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[14811 swap [PE1.1] direco] 7 [x] times&#39;</span><span class="p">)</span>
231 </pre></div>
232 </div>
233 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">PE1</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
234 </pre></div>
235 </div>
236 <section id="reset-at-zero">
237 <h3>Reset at Zero<a class="headerlink" href="#reset-at-zero" title="Permalink to this headline">¶</a></h3>
238 <p>We need a function that checks if the int has reached zero and resets it
239 if so.</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;PE1.1.check == dup [pop 14811] [] branch&#39;</span><span class="p">)</span>
241 </pre></div>
242 </div>
243 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;14811 [PE1.1.check PE1.1] G&#39;</span><span class="p">)</span>
244 </pre></div>
245 </div>
246 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">14811</span> <span class="n">swap</span> <span class="p">[</span><span class="n">PE1</span><span class="o">.</span><span class="mf">1.</span><span class="n">check</span> <span class="n">PE1</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
247 </pre></div>
248 </div>
249 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[14811 swap [PE1.1.check PE1.1] direco] 21 [x] times&#39;</span><span class="p">)</span>
250 </pre></div>
251 </div>
252 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">PE1</span><span class="o">.</span><span class="mf">1.</span><span class="n">check</span> <span class="n">PE1</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
253 </pre></div>
254 </div>
255 <p>(It would be more efficient to reset the int every seven cycles but
256 that’s a little beyond the scope of this article. This solution does
257 extra work, but not much, and we’re not using it “in production” as they
258 say.)</p>
259 </section>
260 <section id="run-466-times">
261 <h3>Run 466 times<a class="headerlink" href="#run-466-times" title="Permalink to this headline">¶</a></h3>
262 <p>In the PE1 problem we are asked to sum all the multiples of three and
263 five less than 1000. It’s worked out that we need to use all seven
264 numbers sixty-six times and then four more.</p>
265 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;7 66 * 4 +&#39;</span><span class="p">)</span>
266 </pre></div>
267 </div>
268 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">466</span>
269 </pre></div>
270 </div>
271 <p>If we drive our generator 466 times and sum the stack we get 999.</p>
272 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[14811 swap [PE1.1.check PE1.1] direco] 466 [x] times&#39;</span><span class="p">)</span>
273 </pre></div>
274 </div>
275 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">3</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">3</span> <span class="p">[</span><span class="mi">57</span> <span class="n">swap</span> <span class="p">[</span><span class="n">PE1</span><span class="o">.</span><span class="mf">1.</span><span class="n">check</span> <span class="n">PE1</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">direco</span><span class="p">]</span>
276 </pre></div>
277 </div>
278 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;[14811 swap [PE1.1.check PE1.1] direco] 466 [x] times pop enstacken sum&#39;</span><span class="p">)</span>
279 </pre></div>
280 </div>
281 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">999</span>
282 </pre></div>
283 </div>
284 </section>
285 </section>
286 <section id="project-euler-problem-one">
287 <h2>Project Euler Problem One<a class="headerlink" href="#project-euler-problem-one" title="Permalink to this headline">¶</a></h2>
288 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;PE1.2 == + dup [+] dip&#39;</span><span class="p">)</span>
289 </pre></div>
290 </div>
291 <p>Now we can add <code class="docutils literal notranslate"><span class="pre">PE1.2</span></code> to the quoted program given to <code class="docutils literal notranslate"><span class="pre">G</span></code>.</p>
292 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;0 0 0 [PE1.1.check PE1.1] G 466 [x [PE1.2] dip] times popop&#39;</span><span class="p">)</span>
293 </pre></div>
294 </div>
295 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">233168</span>
296 </pre></div>
297 </div>
298 </section>
299 <section id="a-generator-for-the-fibonacci-sequence">
300 <h2>A generator for the Fibonacci Sequence.<a class="headerlink" href="#a-generator-for-the-fibonacci-sequence" title="Permalink to this headline">¶</a></h2>
301 <p>Consider:</p>
302 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">x</span>
303 <span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">b</span> <span class="n">a</span> <span class="n">F</span>
304 </pre></div>
305 </div>
306 <p>The obvious first thing to do is just add <code class="docutils literal notranslate"><span class="pre">b</span></code> and <code class="docutils literal notranslate"><span class="pre">a</span></code>:</p>
307 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">b</span> <span class="n">a</span> <span class="o">+</span>
308 <span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span>
309 </pre></div>
310 </div>
311 <p>From here we want to arrive at:</p>
312 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">b</span> <span class="p">[</span><span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">F</span><span class="p">]</span>
313 </pre></div>
314 </div>
315 <p>Let’s start with <code class="docutils literal notranslate"><span class="pre">swons</span></code>:</p>
316 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">swons</span>
317 <span class="p">[</span><span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span>
318 </pre></div>
319 </div>
320 <p>Considering this quote as a stack:</p>
321 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">F</span> <span class="n">a</span> <span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span>
322 </pre></div>
323 </div>
324 <p>We want to get it to:</p>
325 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">F</span> <span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span>
326 </pre></div>
327 </div>
328 <p>So:</p>
329 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">F</span> <span class="n">a</span> <span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">popdd</span> <span class="n">over</span>
330 <span class="n">F</span> <span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span>
331 </pre></div>
332 </div>
333 <p>And therefore:</p>
334 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="p">[</span><span class="n">popdd</span> <span class="n">over</span><span class="p">]</span> <span class="n">infra</span>
335 <span class="p">[</span><span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">F</span><span class="p">]</span>
336 </pre></div>
337 </div>
338 <p>But we can just use <code class="docutils literal notranslate"><span class="pre">cons</span></code> to carry <code class="docutils literal notranslate"><span class="pre">b+a</span></code> into the quote:</p>
339 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="p">[</span><span class="n">popdd</span> <span class="n">over</span><span class="p">]</span> <span class="n">cons</span> <span class="n">infra</span>
340 <span class="p">[</span><span class="n">b</span> <span class="n">a</span> <span class="n">F</span><span class="p">]</span> <span class="p">[</span><span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">popdd</span> <span class="n">over</span><span class="p">]</span>      <span class="n">infra</span>
341 <span class="p">[</span><span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">F</span><span class="p">]</span>
342 </pre></div>
343 </div>
344 <p>Lastly:</p>
345 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">b</span> <span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">F</span><span class="p">]</span> <span class="n">uncons</span>
346 <span class="n">b</span> <span class="p">[</span><span class="n">b</span><span class="o">+</span><span class="n">a</span> <span class="n">b</span> <span class="n">F</span><span class="p">]</span>
347 </pre></div>
348 </div>
349 <p>Putting it all together:</p>
350 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">F</span> <span class="o">==</span> <span class="o">+</span> <span class="p">[</span><span class="n">popdd</span> <span class="n">over</span><span class="p">]</span> <span class="n">cons</span> <span class="n">infra</span> <span class="n">uncons</span>
351 <span class="n">fib_gen</span> <span class="o">==</span> <span class="p">[</span><span class="mi">1</span> <span class="mi">1</span> <span class="n">F</span><span class="p">]</span>
352 </pre></div>
353 </div>
354 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;fib == + [popdd over] cons infra uncons&#39;</span><span class="p">)</span>
355 </pre></div>
356 </div>
357 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;fib_gen == [1 1 fib]&#39;</span><span class="p">)</span>
358 </pre></div>
359 </div>
360 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;fib_gen 10 [x] times&#39;</span><span class="p">)</span>
361 </pre></div>
362 </div>
363 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">5</span> <span class="mi">8</span> <span class="mi">13</span> <span class="mi">21</span> <span class="mi">34</span> <span class="mi">55</span> <span class="mi">89</span> <span class="p">[</span><span class="mi">144</span> <span class="mi">89</span> <span class="n">fib</span><span class="p">]</span>
364 </pre></div>
365 </div>
366 </section>
367 <section id="project-euler-problem-two">
368 <h2>Project Euler Problem Two<a class="headerlink" href="#project-euler-problem-two" title="Permalink to this headline">¶</a></h2>
369 <blockquote>
370 <div><p>By considering the terms in the Fibonacci sequence whose values do
371 not exceed four million, find the sum of the even-valued terms.</p>
372 </div></blockquote>
373 <p>Now that we have a generator for the Fibonacci sequence, we need a
374 function that adds a term in the sequence to a sum if it is even, and
375 <code class="docutils literal notranslate"><span class="pre">pop</span></code>s it otherwise.</p>
376 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;PE2.1 == dup 2 % [+] [pop] branch&#39;</span><span class="p">)</span>
377 </pre></div>
378 </div>
379 <p>And a predicate function that detects when the terms in the series
380 “exceed four million”.</p>
381 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;&gt;4M == 4000000 &gt;&#39;</span><span class="p">)</span>
382 </pre></div>
383 </div>
384 <p>Now it’s straightforward to define <code class="docutils literal notranslate"><span class="pre">PE2</span></code> as a recursive function that
385 generates terms in the Fibonacci sequence until they exceed four million
386 and sums the even ones.</p>
387 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;PE2 == 0 fib_gen x [pop &gt;4M] [popop] [[PE2.1] dip x] primrec&#39;</span><span class="p">)</span>
388 </pre></div>
389 </div>
390 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;PE2&#39;</span><span class="p">)</span>
391 </pre></div>
392 </div>
393 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">4613732</span>
394 </pre></div>
395 </div>
396 <p>Here’s the collected program definitions:</p>
397 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">fib</span> <span class="o">==</span> <span class="o">+</span> <span class="n">swons</span> <span class="p">[</span><span class="n">popdd</span> <span class="n">over</span><span class="p">]</span> <span class="n">infra</span> <span class="n">uncons</span>
398 <span class="n">fib_gen</span> <span class="o">==</span> <span class="p">[</span><span class="mi">1</span> <span class="mi">1</span> <span class="n">fib</span><span class="p">]</span>
399
400 <span class="n">even</span> <span class="o">==</span> <span class="n">dup</span> <span class="mi">2</span> <span class="o">%</span>
401 <span class="o">&gt;</span><span class="mi">4</span><span class="n">M</span> <span class="o">==</span> <span class="mi">4000000</span> <span class="o">&gt;</span>
402
403 <span class="n">PE2</span><span class="o">.</span><span class="mi">1</span> <span class="o">==</span> <span class="n">even</span> <span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span><span class="p">]</span> <span class="n">branch</span>
404 <span class="n">PE2</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">fib_gen</span> <span class="n">x</span> <span class="p">[</span><span class="n">pop</span> <span class="o">&gt;</span><span class="mi">4</span><span class="n">M</span><span class="p">]</span> <span class="p">[</span><span class="n">popop</span><span class="p">]</span> <span class="p">[[</span><span class="n">PE2</span><span class="o">.</span><span class="mi">1</span><span class="p">]</span> <span class="n">dip</span> <span class="n">x</span><span class="p">]</span> <span class="n">primrec</span>
405 </pre></div>
406 </div>
407 <section id="even-valued-fibonacci-terms">
408 <h3>Even-valued Fibonacci Terms<a class="headerlink" href="#even-valued-fibonacci-terms" title="Permalink to this headline">¶</a></h3>
409 <p>Using <code class="docutils literal notranslate"><span class="pre">o</span></code> for odd and <code class="docutils literal notranslate"><span class="pre">e</span></code> for even:</p>
410 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">o</span> <span class="o">+</span> <span class="n">o</span> <span class="o">=</span> <span class="n">e</span>
411 <span class="n">e</span> <span class="o">+</span> <span class="n">e</span> <span class="o">=</span> <span class="n">e</span>
412 <span class="n">o</span> <span class="o">+</span> <span class="n">e</span> <span class="o">=</span> <span class="n">o</span>
413 </pre></div>
414 </div>
415 <p>So the Fibonacci sequence considered in terms of just parity would be:</p>
416 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">o</span> <span class="n">o</span> <span class="n">e</span> <span class="n">o</span> <span class="n">o</span> <span class="n">e</span> <span class="n">o</span> <span class="n">o</span> <span class="n">e</span> <span class="n">o</span> <span class="n">o</span> <span class="n">e</span> <span class="n">o</span> <span class="n">o</span> <span class="n">e</span> <span class="n">o</span> <span class="n">o</span> <span class="n">e</span>
417 <span class="mi">1</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">5</span> <span class="mi">8</span> <span class="o">.</span> <span class="o">.</span> <span class="o">.</span>
418 </pre></div>
419 </div>
420 <p>Every third term is even.</p>
421 <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 0 fib] x x x&#39;</span><span class="p">)</span>  <span class="c1"># To start the sequence with 1 1 2 3 instead of 1 2 3.</span>
422 </pre></div>
423 </div>
424 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="mi">1</span> <span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">2</span> <span class="n">fib</span><span class="p">]</span>
425 </pre></div>
426 </div>
427 <p>Drive the generator three times and <code class="docutils literal notranslate"><span class="pre">popop</span></code> the two odd terms.</p>
428 <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 0 fib] x x x [popop] dipd&#39;</span><span class="p">)</span>
429 </pre></div>
430 </div>
431 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">2</span> <span class="p">[</span><span class="mi">3</span> <span class="mi">2</span> <span class="n">fib</span><span class="p">]</span>
432 </pre></div>
433 </div>
434 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;PE2.2 == x x x [popop] dipd&#39;</span><span class="p">)</span>
435 </pre></div>
436 </div>
437 <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 0 fib] 10 [PE2.2] times&#39;</span><span class="p">)</span>
438 </pre></div>
439 </div>
440 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">2</span> <span class="mi">8</span> <span class="mi">34</span> <span class="mi">144</span> <span class="mi">610</span> <span class="mi">2584</span> <span class="mi">10946</span> <span class="mi">46368</span> <span class="mi">196418</span> <span class="mi">832040</span> <span class="p">[</span><span class="mi">1346269</span> <span class="mi">832040</span> <span class="n">fib</span><span class="p">]</span>
441 </pre></div>
442 </div>
443 <p>Replace <code class="docutils literal notranslate"><span class="pre">x</span></code> with our new driver function <code class="docutils literal notranslate"><span class="pre">PE2.2</span></code> and start our
444 <code class="docutils literal notranslate"><span class="pre">fib</span></code> generator at <code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">0</span></code>.</p>
445 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;0 [1 0 fib] PE2.2 [pop &gt;4M] [popop] [[PE2.1] dip PE2.2] primrec&#39;</span><span class="p">)</span>
446 </pre></div>
447 </div>
448 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">4613732</span>
449 </pre></div>
450 </div>
451 </section>
452 </section>
453 <section id="how-to-compile-these">
454 <h2>How to compile these?<a class="headerlink" href="#how-to-compile-these" title="Permalink to this headline">¶</a></h2>
455 <p>You would probably start with a special version of <code class="docutils literal notranslate"><span class="pre">G</span></code>, and perhaps
456 modifications to the default <code class="docutils literal notranslate"><span class="pre">x</span></code>?</p>
457 </section>
458 <section id="an-interesting-variation">
459 <h2>An Interesting Variation<a class="headerlink" href="#an-interesting-variation" title="Permalink to this headline">¶</a></h2>
460 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;codireco == cons dip rest cons&#39;</span><span class="p">)</span>
461 </pre></div>
462 </div>
463 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">&#39;[0 [dup ++] codireco] x&#39;</span><span class="p">)</span>
464 </pre></div>
465 </div>
466 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span>                                 <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="n">x</span>
467            <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="o">.</span> <span class="n">x</span>
468            <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="o">.</span> <span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span>
469          <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="mi">0</span> <span class="o">.</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span>
470 <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">codireco</span>
471 <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
472 <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="p">[</span><span class="mi">0</span> <span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="n">rest</span> <span class="n">cons</span>
473                                  <span class="o">.</span> <span class="mi">0</span> <span class="n">dup</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
474                                <span class="mi">0</span> <span class="o">.</span> <span class="n">dup</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
475                              <span class="mi">0</span> <span class="mi">0</span> <span class="o">.</span> <span class="o">++</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
476                              <span class="mi">0</span> <span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="n">rest</span> <span class="n">cons</span>
477        <span class="mi">0</span> <span class="mi">1</span> <span class="p">[</span><span class="mi">0</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="o">.</span> <span class="n">rest</span> <span class="n">cons</span>
478          <span class="mi">0</span> <span class="mi">1</span> <span class="p">[[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="o">.</span> <span class="n">cons</span>
479          <span class="mi">0</span> <span class="p">[</span><span class="mi">1</span> <span class="p">[</span><span class="n">dup</span> <span class="o">++</span><span class="p">]</span> <span class="n">codireco</span><span class="p">]</span> <span class="o">.</span>
480 </pre></div>
481 </div>
482 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">&#39;G == [codireco] cons cons&#39;</span><span class="p">)</span>
483 </pre></div>
484 </div>
485 <div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">&#39;230 [dup ++] G 5 [x] times pop&#39;</span><span class="p">)</span>
486 </pre></div>
487 </div>
488 <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="mi">230</span> <span class="mi">231</span> <span class="mi">232</span> <span class="mi">233</span> <span class="mi">234</span>
489 </pre></div>
490 </div>
491 </section>
492 </section>
493
494
495           </div>
496           
497         </div>
498       </div>
499       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
500         <div class="sphinxsidebarwrapper">
501 <h1 class="logo"><a href="../index.html">Thun</a></h1>
502
503
504
505
506
507
508
509
510 <h3>Navigation</h3>
511 <ul class="current">
512 <li class="toctree-l1"><a class="reference internal" href="Intro.html">Thun: Joy in Python</a></li>
513 <li class="toctree-l1"><a class="reference internal" href="../joy.html">Joy Interpreter</a></li>
514 <li class="toctree-l1"><a class="reference internal" href="../stack.html">Stack or Quote or Sequence or List…</a></li>
515 <li class="toctree-l1"><a class="reference internal" href="../parser.html">Parsing Text into Joy Expressions</a></li>
516 <li class="toctree-l1"><a class="reference internal" href="../pretty.html">Tracing Joy Execution</a></li>
517 <li class="toctree-l1"><a class="reference internal" href="../library.html">Function Reference</a></li>
518 <li class="toctree-l1"><a class="reference internal" href="../lib.html">Functions Grouped by, er, Function with Examples</a></li>
519 <li class="toctree-l1"><a class="reference internal" href="../types.html">Type Inference of Joy Expressions</a></li>
520 <li class="toctree-l1 current"><a class="reference internal" href="index.html">Essays about Programming in Joy</a><ul class="current">
521 <li class="toctree-l2"><a class="reference internal" href="Developing.html">Developing a Program in Joy</a></li>
522 <li class="toctree-l2"><a class="reference internal" href="Quadratic.html">Quadratic formula</a></li>
523 <li class="toctree-l2"><a class="reference internal" href="Replacing.html">Replacing Functions in the Dictionary</a></li>
524 <li class="toctree-l2"><a class="reference internal" href="Recursion_Combinators.html">Recursion Combinators</a></li>
525 <li class="toctree-l2"><a class="reference internal" href="Ordered_Binary_Trees.html">Treating Trees I: Ordered Binary Trees</a></li>
526 <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>
527 <li class="toctree-l2 current"><a class="current reference internal" href="#">Using <code class="docutils literal notranslate"><span class="pre">x</span></code> to Generate Values</a></li>
528 <li class="toctree-l2"><a class="reference internal" href="Newton-Raphson.html">Newton’s method</a></li>
529 <li class="toctree-l2"><a class="reference internal" href="Square_Spiral.html">Square Spiral Example Joy Code</a></li>
530 <li class="toctree-l2"><a class="reference internal" href="Zipper.html">Traversing Datastructures with Zippers</a></li>
531 <li class="toctree-l2"><a class="reference internal" href="Types.html">The Blissful Elegance of Typing Joy</a></li>
532 <li class="toctree-l2"><a class="reference internal" href="TypeChecking.html">Type Checking</a></li>
533 <li class="toctree-l2"><a class="reference internal" href="NoUpdates.html">No Updates</a></li>
534 <li class="toctree-l2"><a class="reference internal" href="Categorical.html">Categorical Programming</a></li>
535 <li class="toctree-l2"><a class="reference internal" href="The_Four_Operations.html">The Four Fundamental Operations of Definite Action</a></li>
536 <li class="toctree-l2"><a class="reference internal" href="Derivatives_of_Regular_Expressions.html">∂RE</a></li>
537 </ul>
538 </li>
539 </ul>
540
541 <div class="relations">
542 <h3>Related Topics</h3>
543 <ul>
544   <li><a href="../index.html">Documentation overview</a><ul>
545   <li><a href="index.html">Essays about Programming in Joy</a><ul>
546       <li>Previous: <a href="Treestep.html" title="previous chapter">Treating Trees II: <code class="docutils literal notranslate"><span class="pre">treestep</span></code></a></li>
547       <li>Next: <a href="Newton-Raphson.html" title="next chapter">Newton’s method</a></li>
548   </ul></li>
549   </ul></li>
550 </ul>
551 </div>
552 <div id="searchbox" style="display: none" role="search">
553   <h3 id="searchlabel">Quick search</h3>
554     <div class="searchformwrapper">
555     <form class="search" action="../search.html" method="get">
556       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
557       <input type="submit" value="Go" />
558     </form>
559     </div>
560 </div>
561 <script>$('#searchbox').show(0);</script>
562
563
564
565
566
567
568
569
570         </div>
571       </div>
572       <div class="clearer"></div>
573     </div>
574     <div class="footer" role="contentinfo">
575 <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">
576 <img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" />
577 </a>
578 <br />
579 <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>.
580       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 4.3.0.
581     </div>
582
583   </body>
584 </html>