@@ -16,8 +16,8 @@
< script type = "text/javascript" src = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" > < / script >
< link rel = "index" title = "Index" href = "../genindex.html" / >
< link rel = "search" title = "Search" href = "../search.html" / >
< link rel = "next" title = "Traversing Datastructures with Zippers" href = "Zipper .html" / >
< link rel = "prev" title = "Newton’ s method" href = "Newton-Raphson .html" / >
< link rel = "next" title = "Replacing Functions in the Dictionary" href = "Replacing .html" / >
< link rel = "prev" title = "Developing a Program in Joy" href = "Developing .html" / >
< link rel = "stylesheet" href = "../_static/custom.css" type = "text/css" / >
@@ -32,156 +32,136 @@
< div class = "bodywrapper" >
< div class = "body" role = "main" >
< div class = "section" id = "quadratic-formula" >
< h1 > < a class = "reference external" href = "https://en.wikipedia.org/wiki/Quadratic_formula" > Quadratic formula< / a > < a class = "headerlink" href = "#quadratic-formula" title = "Permalink to this headline" > ¶< / a > < / h1 >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "kn" > from< / span > < span class = "nn" > notebook_preamble< / span > < span class = "k" > 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 >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "kn" > from < / span > < span class = "nn" > notebook_preamble < / span > < span class = "k" > 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 >
< / pre > < / div >
< / div >
< div class = "section" id = "quadratic-formula" >
< h1 > < a class = "reference external" href = "https://en.wikipedia.org/wiki/Quadratic_formula" > Quadratic formula< / a > < a class = "headerlink" href = "#quadratic-formula" title = "Permalink to this headline" > ¶< / a > < / h1 >
< p > Cf.
< a class = "reference external" href = "http://www.kevinalbrecht.com/code/joy-mirror/jp-quadratic.html" > jp-quadratic.html< / a > < / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o" > - < / span > < span class = "n" > b < / span > < span class = "o" > +/- < / span > < span class = "n" > sqrt < / span > < span class = "p" > ( < / span > < span class = "n" > b < / span > < span class = "o" > ^ < / span > < span class = "mi" > 2 < / span > < span class = "o" > - < / span > < span class = "mi" > 4 < / span > < span class = "o" > * < / span > < span class = "n" > a < / span > < span class = "o" > * < / span > < span class = "n" > c < / span > < span class = "p" > ) < / span >
< span class = "o" > -----------------------------< / span >
< span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "n" > a< / span >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > -b ± sqrt(b^2 - 4 * a * c)
--------------------------------
2 * a
< / pre > < / div >
< / div >
< p > < span class = "math notranslate nohighlight" > \(\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}\)< / span > < / p >
< div class = "section" id = "write-a-straightforward-program-with-variable-names" >
< h2 > Write a straightforward program with variable names.< a class = "headerlink" href = "#write-a-straightforward-program-with-variable-names" title = "Permalink to this headline" > ¶< / a > < / h2 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b < / span > < span class = "n" > neg < / span > < span class = "n" > b < / span > < span class = "n" > sqr < / span > < span class = "mi" > 4 < / span > < span class = "n" > a < / span > < span class = "n" > c < / span > < span class = "o" > * < / span > < span class = "o" > * < / span > < span class = "o" > - < / span > < span class = "n" > sqrt < / span > < span class = "p" > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "n" > a < / span > < span class = "mi" > 2 < / span > < span class = "o" > * < / span > < span class = "p" > [ < / span > < span class = "n" > truediv < / span > < span class = "p" > ] < / span > < span class = "n" > cons < / span > < span class = "n" > app2 < / span >
< p > This math translates to Joy code in a straightforward manner. We are
going to use named variables to keep track of the arguments, then write
a definition without them.< / p >
< div class = "section" id = "b" >
< h3 > < code class = "docutils literal notranslate" > < span class = "pre" > -b< / span > < / code > < a class = "headerlink" href = "#b" title = "Permalink to this headline" > ¶< / a > < / h3 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b< / span > < span class = "n" > neg< / span >
< / pre > < / div >
< / div >
< p > We use < code class = "docutils literal notranslate" > < span class = "pre" > cleave < / span > < / code > to compute the sum and difference and then < code class = "docutils literal notranslate" > < span class = "pre" > app2 < / span > < / code > to
finish computing both roots using a quoted program < code class = "docutils literal notranslate" > < span class = "pre" > [2a < / span > < span class = "pre" > truediv] < / span > < / code >
built with < code class = "docutils literal notranslate" > < span class = "pre" > cons < / span > < / code > . < / p >
< div class = "section" id = "check-it" >
< h3 > Check it.< a class = "headerlink" href = "#check-it" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > Evaluating by hand:< / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b< / span > < span class = "n" > neg< / span > < span class = "n" > b< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > b< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "mi" > 4< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "n" > sqrt< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span >
< / div >
< div class = "section" id = "sqrt-b-2-4-a-c" >
< h3 > < code class = "docutils literal notranslate" > < span class = "pre" > sqrt(b^2 < / span > < span class = "pre" > - < / span > < span class = "pre" > 4 < / span > < span class = "pre" > * < / span > < span class = "pre" > a < / span > < span class = "pre" > * < / span > < span class = "pre" > c) < / span > < / code > < a class = "headerlink" href = "#sqrt-b-2-4-a-c" title = "Permalink to this headline" > ¶ < / a > < / h3 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b < / span > < span class = "n" > sqr < / span > < span class = "mi" > 4 < / span > < span class = "n" > a < / span > < span class = "n" > c < / span > < span class = "o" > * < / span > < span class = "o" > * < / span > < span class = "o" > - < / span > < span class = "n" > sqrt < / span >
< / pre > < / div >
< / div >
< p > (Eventually we’ ll be able to use e.g. Sympy versions of the Joy commands
to do this sort of thing symbolically. This is part of what is meant by
a “categorical” language.)< / p >
< / div >
< div class = "section" id = "cleanup " >
< h3 > Cleanup < a class = "headerlink" href = "#cleanup " title = "Permalink to this headline" > ¶< / a > < / h3 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o" > - < / span > < span class = "n" > b < / span > < span class = "o" > - < / span > < span class = "n" > b < / span > < span class = "o" > + < / span > < span class = "n" > sqrt < / span > < span class = "p" > ( < / span > < span class = "n" > b < / span > < span class = "o" > ^ < / span > < span class = "mi" > 2 < / span > < span class = "o" > - < / span > < span class = "mi" > 4 < / span > < span class = "n" > ac < / span > < span class = "p" > ) < / span > < span class = "o" > / < / span > < span class = "mi" > 2 < / span > < span class = "n" > a < / span > < span class = "o" > - < / span > < span class = "n" > b < / span > < span class = "o" > - < / span > < span class = "n" > sqrt < / span > < span class = "p" > ( < / span > < span class = "n" > b < / span > < span class = "o" > ^ < / span > < span class = "mi" > 2 < / span > < span class = "o" > - < / span > < span class = "mi" > 4 < / span > < span class = "n" > ac < / span > < span class = "p" > ) < / span > < span class = "o" > / < / span > < span class = "mi" > 2 < / span > < span class = "n" > a < / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "n" > pop< / span >
< span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span > < span class = "o" > -< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "o" > ^< / span > < span class = "mi" > 2< / span > < span class = "o" > -< / span > < span class = "mi" > 4< / span > < span class = "n" > ac< / span > < span class = "p" > )< / span > < span class = "o" > /< / span > < span class = "mi" > 2< / span > < span class = "n" > a< / span >
< div class = "section" id = "a " >
< h3 > < code class = "docutils literal notranslate" > < span class = "pre" > /2a < / span > < / code > < a class = "headerlink" href = "#a " title = "Permalink to this headline" > ¶< / a > < / h3 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > a< / span > < span class = "mi" > 2 < / span > < span class = "o" > * < / span > < span class = "o" > / < / span >
< / pre > < / div >
< / div >
< / div >
< div class = "section" id = "id1" >
< h3 > < code class = "docutils literal notranslate" > < span class = "pre" > ±< / span > < / code > < a class = "headerlink" href = "#id1" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > There is a function < code class = "docutils literal notranslate" > < span class = "pre" > pm< / span > < / code > that accepts two values on the stack and
replaces them with their sum and difference.< / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > pm< / span > < span class = "o" > ==< / span > < span class = "p" > [< / span > < span class = "o" > +< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "p" > ]< / span > < span class = "n" > cleave< / span > < span class = "n" > popdd< / span >
< / pre > < / div >
< / div >
< / div >
< div class = "section" id = "putting-them-together" >
< h3 > Putting Them Together< a class = "headerlink" href = "#putting-them-together" title = "Permalink to this headline" > ¶< / a > < / h3 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b< / span > < span class = "n" > neg< / span > < span class = "n" > b< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< / pre > < / div >
< / div >
< p > We use < code class = "docutils literal notranslate" > < span class = "pre" > app2< / span > < / code > to compute both roots by using a quoted program
< code class = "docutils literal notranslate" > < span class = "pre" > [2a< / span > < span class = "pre" > /]< / span > < / code > built with < code class = "docutils literal notranslate" > < span class = "pre" > cons< / span > < / code > .< / p >
< / div >
< / div >
< div class = "section" id = "derive-a-definition" >
< h2 > Derive a definition.< a class = "headerlink" href = "#derive-a-definition" title = "Permalink to this headline" > ¶< / a > < / h2 >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > b < / span > < span class = "n" > neg < / span > < span class = "n" > b < / span > < span class = "n" > sqr < / span > < span class = "mi" > 4 < / span > < span class = "n" > a < / span > < span class = "n" > c < / span > < span class = "o" > * < / span > < span class = "o" > * < / span > < span class = "o" > - < / span > < span class = "n" > sqrt < / span > < span class = "p" > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "n" > a < / span > < span class = "mi" > 2 < / span > < span class = "o" > * < / span > < span class = "p" > [ < / span > < span class = "n" > truediv < / span > < span class = "p" > ] < / span > < span class = "n" > cons < / span > < span class = "n" > app2 < / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< span class = "n" > b < / span > < span class = "p" > [ < / span > < span class = "n" > neg < / span > < span class = "p" > ] < / span > < span class = "n" > dupdip < / span > < span class = "n" > sqr < / span > < span class = "mi" > 4 < / span > < span class = "n" > a < / span > < span class = "n" > c < / span > < span class = "o" > * < / span > < span class = "o" > * < / span > < span class = "o" > - < / span > < span class = "n" > sqrt < / span > < span class = "p" > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "n" > a < / span > < span class = "mi" > 2 < / span > < span class = "o" > * < / span > < span class = "p" > [ < / span > < span class = "n" > truediv < / span > < span class = "p" > ] < / span > < span class = "n" > cons < / span > < span class = "n" > app2 < / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< span class = "n" > b < / span > < span class = "n " > a < / span > < span class = "n" > c < / span > < span class = "p " > [[ < / span > < span class = "n" > neg< / span > < span class = "p" > ] < / span > < span class = "n" > dupdip < / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p " > ] < / span > < span class = "n" > dipd < / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p " > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n " > truediv < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< span class = "n" > b< / span > < span class = "n" > a < / span > < span class = "n" > c < / span > < span class = "n" > a < / span > < span class = "p" > [[[ < / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p " > ] < / span > < span class = "n" > dipd < / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p " > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "p" > ] < / span > < span class = "n" > dip < / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n " > truediv < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< span class = "n" > b< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "n" > over < / span > < span class = "p" > [[[ < / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "p" > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "p" > ] < / span > < span class = "n" > dip < / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n " > truediv < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span > < span class = "n" > roll < / span > < span class = "o" > < < / span > < span class = "n" > pop < / span >
< p > Working backwards we use < code class = "docutils literal notranslate" > < span class = "pre " > dip < / span > < / code > and < code class = "docutils literal notranslate" > < span class = "pre" > dipd < / span > < / code > to extract the code from
the variables: < / p >
< div class = "highlight-default notranslate" > < div class = "highlight " > < pre > < span > < / span > < span class = "n " > b < / span > < span class = "n" > neg< / span > < span class = "n" > b < / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "n " > a < / span > < span class = "n" > c < / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n " > pm < / span > < span class = "n" > a< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o " > / < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "n" > b< / span > < span class = "p" > [< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "n " > a < / span > < span class = "n" > c < / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n " > pm < / span > < span class = "n" > a < / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o " > / < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "n" > b< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "p" > [[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm < / span > < span class = "n" > a < / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o " > / < / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "n" > b< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "n" > a< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "n" > b< / span > < span class = "n" > a< / span > < span class = "n" > c< / span > < span class = "n" > over< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< / pre > < / div >
< / div >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > define < / span > < span class = "p" > ( < / span > < span class = "s1" > ' quadratic == over [[[neg] dupdip sqr 4] dipd * * - sqrt [+] [-] cleave] dip 2 * [truediv] cons app2 roll < pop ' < / span > < span class = "p" > ) < / span >
< p > The three arguments are to the left, so we can “chop off” everything to
the right and say it’ s the definition of the < code class = "docutils literal notranslate" > < span class = "pre" > quadratic< / span > < / code > function:< / p >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > define< / span > < span class = "p" > (< / span > < span class = "s1" > ' quadratic == over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2' < / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< p > Let’ s try it out:< / p >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > J< / span > < span class = "p" > (< / span > < span class = "s1" > ' 3 1 1 quadratic' < / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span >
< / pre > < / div >
< / div >
< / div >
< div class = "section" id = "simplify" >
< h2 > Simplify< a class = "headerlink" href = "#simplify" title = "Permalink to this headline" > ¶< / a > < / h2 >
< p > We can define a < code class = "docutils literal notranslate" > < span class = "pre" > pm < / span > < / code > plus-or-minus function: < / p >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > pm < / span > < span class = "o" > == < / span > < span class = "p" > [ < / span > < span class = "o" > + < / span > < span class = "p" > ] < / span > < span class = "p" > [ < / span > < span class = "o " > - < / span > < span class = "p" > ] < / span > < span class = "n" > cleave < / span > < span class = "n " > popdd < / span >
< p > If you look at the Joy evaluation trace you can see that the first few
lines are the < code class = "docutils literal notranslate" > < span class = "pre" > dip < / span > < / code > and < code class = "docutils literal notranslate" > < span class = "pre" > dipd < / span > < / code > combinators building the main program
by incorporating the values on the stack. Then that program runs and you
get the results. This is pretty typical of Joy code. < / p >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > V < / span > < span class = "p" > ( < / span > < span class = "s1 " > ' -5 1 4 quadratic ' < / span > < span class = "p " > ) < / span >
< / pre > < / div >
< / div >
< p > Then < code class = "docutils literal notranslate" > < span class = "pre " > quadratic < / span > < / code > becomes: < / p >
< div class = "code ipython2 highlight-default notranslate " > < div class = "highlight" > < pre > < span > < / span > < span class = "n " > define < / span > < span class = "p " > ( < / span > < span class = "s1 " > ' quadratic == over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [truediv] cons app2 ' < / span > < span class = "p " > ) < / span >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o " > . < / span > < span class = "o" > - < / span > < span class = "mi" > 5 < / span > < span class = "mi" > 1 < / span > < span class = "mi" > 4 < / span > < span class = "n" > quadratic < / span >
< span class = "o " > - < / span > < span class = "mi" > 5 < / span > < span class = "o " > . < / span > < span class = "mi " > 1 < / span > < span class = "mi " > 4 < / span > < span class = "n " > quadratic < / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 4< / span > < span class = "n" > quadratic< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "n" > quadratic< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "n" > over< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "p" > [[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "p" > [[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "p" > [< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "n" > neg< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "n" > dup< / span > < span class = "n" > mul< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > -< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "n" > mul< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "o" > .< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 4< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "mi" > 4< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 25< / span > < span class = "mi" > 16< / span > < span class = "o" > .< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mi" > 9< / span > < span class = "o" > .< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 5< / span > < span class = "mf" > 3.0< / span > < span class = "o" > .< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "mi" > 2< / span > < span class = "p" > [< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mf" > 8.0< / span > < span class = "mf" > 2.0< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > app2< / span >
< span class = "p" > [< / span > < span class = "mf" > 8.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 8.0< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 8.0< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "o" > /< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "o" > .< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "p" > []< / span > < span class = "o" > .< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "p" > [< / span > < span class = "mf" > 4.0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "p" > [< / span > < span class = "mf" > 2.0< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "mf" > 2.0< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "o" > /< / span > < span class = "p" > [< / span > < span class = "mf" > 4.0< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "mf" > 2.0< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "o" > /< / span > < span class = "p" > [< / span > < span class = "mf" > 4.0< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "mf" > 1.0< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "mf" > 4.0< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "mf" > 1.0< / span > < span class = "p" > [< / span > < span class = "mf" > 4.0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "p" > [< / span > < span class = "mf" > 1.0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > first< / span >
< span class = "mf" > 4.0< / span > < span class = "mf" > 1.0< / span > < span class = "o" > .< / span >
< / pre > < / div >
< / div >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > J< / span > < span class = "p" > (< / span > < span class = "s1" > ' 3 1 1 quadratic' < / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span >
< / pre > < / div >
< / div >
< div class = "section" id = "define-a-native-pm-function" >
< h3 > Define a “native” < code class = "docutils literal notranslate" > < span class = "pre" > pm< / span > < / code > function.< a class = "headerlink" href = "#define-a-native-pm-function" title = "Permalink to this headline" > ¶< / a > < / h3 >
< p > The definition of < code class = "docutils literal notranslate" > < span class = "pre" > pm< / span > < / code > above is pretty elegant, but the implementation
takes a lot of steps relative to what it’ s accomplishing. Since we are
likely to use < code class = "docutils literal notranslate" > < span class = "pre" > pm< / span > < / code > more than once in the future, let’ s write a
primitive in Python and add it to the dictionary. (This has been done
already.)< / p >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "k" > def< / span > < span class = "nf" > pm< / span > < span class = "p" > (< / span > < span class = "n" > stack< / span > < span class = "p" > ):< / span >
< span class = "n" > a< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > b< / span > < span class = "p" > ,< / span > < span class = "n" > stack< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "n" > stack< / span >
< span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > m< / span > < span class = "p" > ,< / span > < span class = "o" > =< / span > < span class = "n" > b< / span > < span class = "o" > +< / span > < span class = "n" > a< / span > < span class = "p" > ,< / span > < span class = "n" > b< / span > < span class = "o" > -< / span > < span class = "n" > a< / span >
< span class = "k" > return< / span > < span class = "n" > m< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > p< / span > < span class = "p" > ,< / span > < span class = "n" > stack< / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< p > The resulting trace is short enough to fit on a page.< / p >
< div class = "code ipython2 highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "n" > V< / span > < span class = "p" > (< / span > < span class = "s1" > ' 3 1 1 quadratic' < / span > < span class = "p" > )< / span >
< / pre > < / div >
< / div >
< div class = "highlight-default notranslate" > < div class = "highlight" > < pre > < span > < / span > < span class = "o" > .< / span > < span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "n" > quadratic< / span >
< span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "n" > quadratic< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "n" > quadratic< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "n" > quadratic< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "n" > over< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "p" > [[[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dip< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "p" > [[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "p" > [[< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dipd< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "p" > [< / span > < span class = "n" > neg< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > dupdip< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "n" > neg< / span > < span class = "mi" > 3< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "mi" > 3< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "n" > sqr< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "n" > dup< / span > < span class = "n" > mul< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 3< / span > < span class = "mi" > 3< / span > < span class = "o" > .< / span > < span class = "n" > mul< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "o" > .< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "mi" > 4< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 9< / span > < span class = "mi" > 4< / span > < span class = "o" > .< / span > < span class = "o" > -< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mi" > 5< / span > < span class = "o" > .< / span > < span class = "n" > sqrt< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mi" > 3< / span > < span class = "mf" > 2.23606797749979< / span > < span class = "o" > .< / span > < span class = "n" > pm< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "o" > .< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "mi" > 1< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "mi" > 1< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "o" > *< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "mi" > 2< / span > < span class = "p" > [< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > cons< / span > < span class = "n" > app2< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > app2< / span >
< span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.7639320225002102< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "n" > truediv< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "o" > .< / span > < span class = "p" > []< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > []< / span > < span class = "o" > .< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > first< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "p" > ]< / span > < span class = "p" > [< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > infra< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "o" > .< / span > < span class = "mi" > 2< / span > < span class = "n" > truediv< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 5.23606797749979< / span > < span class = "mi" > 2< / span > < span class = "o" > .< / span > < span class = "n" > truediv< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span > < span class = "o" > .< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > ]< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > swaack< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > first< / span >
< span class = "o" > -< / span > < span class = "mf" > 0.3819660112501051< / span > < span class = "o" > -< / span > < span class = "mf" > 2.618033988749895< / span > < span class = "o" > .< / span >
< / pre > < / div >
< / div >
< / div >
< / div >
< / div >
@@ -195,15 +175,14 @@ already.)</p>
< ul >
< li > < a class = "reference internal" href = "#" > Quadratic formula< / a > < ul >
< li > < a class = "reference internal" href = "#write-a-straightforward-program-with-variable-names" > Write a straightforward program with variable names.< / a > < ul >
< li > < a class = "reference internal" href = "#check-it" > Check it. < / a > < / li >
< li > < a class = "reference internal" href = "#cleanup" > Cleanup < / a > < / li >
< li > < a class = "reference internal" href = "#b" > < code class = "docutils literal notranslate" > < span class = "pre" > -b < / span > < / code > < / a > < / li >
< li > < a class = "reference internal" href = "#sqrt-b-2-4-a-c" > < code class = "docutils literal notranslate" > < span class = "pre" > sqrt(b^2 < / span > < span class = "pre" > - < / span > < span class = "pre" > 4 < / span > < span class = "pre" > * < / span > < span class = "pre" > a < / span > < span class = "pre" > * < / span > < span class = "pre" > c) < / span > < / code > < / a > < / li >
< li > < a class = "reference internal" href = "#a" > < code class = "docutils literal notranslate" > < span class = "pre" > /2a< / span > < / code > < / a > < / li >
< li > < a class = "reference internal" href = "#id1" > < code class = "docutils literal notranslate" > < span class = "pre" > ±< / span > < / code > < / a > < / li >
< li > < a class = "reference internal" href = "#putting-them-together" > Putting Them Together< / a > < / li >
< / ul >
< / li >
< li > < a class = "reference internal" href = "#derive-a-definition" > Derive a definition.< / a > < / li >
< li > < a class = "reference internal" href = "#simplify" > Simplify< / a > < ul >
< li > < a class = "reference internal" href = "#define-a-native-pm-function" > Define a “native” < code class = "docutils literal notranslate" > < span class = "pre" > pm< / span > < / code > function.< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< / ul >
@@ -212,8 +191,8 @@ already.)</p>
< ul >
< li > < a href = "../index.html" > Documentation overview< / a > < ul >
< li > < a href = "index.html" > Essays about Programming in Joy< / a > < ul >
< li > Previous: < a href = "Newton-Raphson .html" title = "previous chapter" > Newton’ s method < / a > < / li >
< li > Next: < a href = "Zipper .html" title = "next chapter" > Traversing Datastructures with Zippers < / a > < / li >
< li > Previous: < a href = "Developing .html" title = "previous chapter" > Developing a Program in Joy < / a > < / li >
< li > Next: < a href = "Replacing .html" title = "next chapter" > Replacing Functions in the Dictionary < / a > < / li >
< / ul > < / li >
< / ul > < / li >
< / ul >