Thun/docs/sphinx_docs/_build/html/notebooks/Replacing.html

258 lines
46 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Replacing Functions in the Dictionary &#8212; Thun 0.4.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Recursion Combinators" href="Recursion_Combinators.html" />
<link rel="prev" title="Quadratic formula" href="Quadratic.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="replacing-functions-in-the-dictionary">
<h1>Replacing Functions in the Dictionary<a class="headerlink" href="#replacing-functions-in-the-dictionary" title="Permalink to this headline"></a></h1>
<p>For now, there is no way to define new functions from within the Joy
language. All functions (and the interpreter) all accept and return a
dictionary parameter (in addition to the stack and expression) so that
we can implement e.g. a function that adds new functions to the
dictionary. However, theres no function that does that. Adding a new
function to the dictionary is a meta-interpreter action, you have to do
it in Python, not Joy.</p>
<div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span>from notebook_preamble import D, J, V
</pre></div>
</div>
<section id="a-long-trace">
<h2>A long trace<a class="headerlink" href="#a-long-trace" title="Permalink to this headline"></a></h2>
<div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span>V(&#39;[23 18] average&#39;)
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">.</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="n">average</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="n">average</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">app2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">.</span> <span class="n">app2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</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="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">41</span> <span class="o">.</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">41</span> <span class="mf">1.0</span> <span class="o">.</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="o">.</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</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="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="mf">41.0</span><span class="p">]</span> <span class="o">.</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="o">.</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="o">.</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</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="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="n">size</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</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">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</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">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">0</span> <span class="mi">23</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">0</span> <span class="mi">23</span> <span class="o">.</span> <span class="n">pop</span> <span class="o">++</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">0</span> <span class="o">.</span> <span class="o">++</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="o">.</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="p">[</span><span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">step</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="mi">18</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="mi">18</span> <span class="o">.</span> <span class="n">pop</span> <span class="o">++</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">1</span> <span class="o">.</span> <span class="o">++</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">2</span> <span class="o">.</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">2</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</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="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="mi">2</span> <span class="o">.</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="mi">2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="o">.</span> <span class="n">popd</span> <span class="mi">2</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="o">.</span> <span class="mi">2</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="mi">2</span> <span class="o">.</span> <span class="o">/</span>
<span class="mf">20.5</span> <span class="o">.</span>
</pre></div>
</div>
</section>
<section id="replacing-size-with-a-python-version">
<h2>Replacing <code class="docutils literal notranslate"><span class="pre">size</span></code> with a Python version<a class="headerlink" href="#replacing-size-with-a-python-version" title="Permalink to this headline"></a></h2>
<p>Both <code class="docutils literal notranslate"><span class="pre">sum</span></code> and <code class="docutils literal notranslate"><span class="pre">size</span></code> each convert a sequence to a single value.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="nb">sum</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="o">+</span><span class="p">]</span> <span class="n">step</span>
<span class="n">size</span> <span class="o">==</span> <span class="mi">0</span> <span class="n">swap</span> <span class="p">[</span><span class="n">pop</span> <span class="o">++</span><span class="p">]</span> <span class="n">step</span>
</pre></div>
</div>
<p>An efficient <code class="docutils literal notranslate"><span class="pre">sum</span></code> function is already in the library. But for
<code class="docutils literal notranslate"><span class="pre">size</span></code> we can use a “compiled” version hand-written in Python to speed
up evaluation and make the trace more readable.</p>
<div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span>from joy.library import SimpleFunctionWrapper
from joy.utils.stack import iter_stack
@SimpleFunctionWrapper
def size(stack):
&#39;&#39;&#39;Return the size of the sequence on the stack.&#39;&#39;&#39;
sequence, stack = stack
n = 0
for _ in iter_stack(sequence):
n += 1
return n, stack
</pre></div>
</div>
<p>Now we replace the old version in the dictionary with the new version,
and re-evaluate the expression.</p>
<div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span>D[&#39;size&#39;] = size
</pre></div>
</div>
</section>
<section id="a-shorter-trace">
<h2>A shorter trace<a class="headerlink" href="#a-shorter-trace" title="Permalink to this headline"></a></h2>
<p>You can see that <code class="docutils literal notranslate"><span class="pre">size</span></code> now executes in a single step.</p>
<div class="highlight-ipython2 notranslate"><div class="highlight"><pre><span></span>V(&#39;[23 18] average&#39;)
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">.</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="n">average</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="n">average</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="n">cleave</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">app2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">.</span> <span class="n">app2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</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="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="nb">sum</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">41</span> <span class="o">.</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">41</span> <span class="mf">1.0</span> <span class="o">.</span> <span class="o">*</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="o">.</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="p">[[</span><span class="mi">23</span> <span class="mi">18</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="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="mf">41.0</span><span class="p">]</span> <span class="o">.</span> <span class="n">first</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="o">.</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="o">.</span> <span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="n">infra</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[[</span><span class="n">size</span><span class="p">]</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="p">[</span><span class="n">i</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="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">.</span> <span class="n">i</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="o">.</span> <span class="n">size</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">2</span> <span class="o">.</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]]</span> <span class="n">swaack</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="mi">2</span> <span class="p">[</span><span class="mf">41.0</span> <span class="p">[</span><span class="mi">23</span> <span class="mi">18</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="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">.</span> <span class="n">first</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="mi">2</span> <span class="o">.</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="mi">2</span> <span class="p">[</span><span class="n">popd</span><span class="p">]</span> <span class="o">.</span> <span class="n">dip</span> <span class="o">/</span>
<span class="p">[</span><span class="mi">23</span> <span class="mi">18</span><span class="p">]</span> <span class="mf">41.0</span> <span class="o">.</span> <span class="n">popd</span> <span class="mi">2</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="o">.</span> <span class="mi">2</span> <span class="o">/</span>
<span class="mf">41.0</span> <span class="mi">2</span> <span class="o">.</span> <span class="o">/</span>
<span class="mf">20.5</span> <span class="o">.</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">Thun</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="Intro.html">Thun: Joy in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="../joy.html">Joy Interpreter</a></li>
<li class="toctree-l1"><a class="reference internal" href="../stack.html">Stack or Quote or Sequence or List…</a></li>
<li class="toctree-l1"><a class="reference internal" href="../parser.html">Parsing Text into Joy Expressions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../pretty.html">Tracing Joy Execution</a></li>
<li class="toctree-l1"><a class="reference internal" href="../library.html">Function Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../lib.html">Functions Grouped by, er, Function with Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="../types.html">Type Inference of Joy Expressions</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Essays about Programming in Joy</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Developing.html">Developing a Program in Joy</a></li>
<li class="toctree-l2"><a class="reference internal" href="Quadratic.html">Quadratic formula</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Replacing Functions in the Dictionary</a></li>
<li class="toctree-l2"><a class="reference internal" href="Recursion_Combinators.html">Recursion Combinators</a></li>
<li class="toctree-l2"><a class="reference internal" href="Ordered_Binary_Trees.html">Treating Trees I: Ordered Binary Trees</a></li>
<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>
<li class="toctree-l2"><a class="reference internal" href="Generator_Programs.html">Using <code class="docutils literal notranslate"><span class="pre">x</span></code> to Generate Values</a></li>
<li class="toctree-l2"><a class="reference internal" href="Newton-Raphson.html">Newtons method</a></li>
<li class="toctree-l2"><a class="reference internal" href="Square_Spiral.html">Square Spiral Example Joy Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="Zipper.html">Traversing Datastructures with Zippers</a></li>
<li class="toctree-l2"><a class="reference internal" href="Types.html">The Blissful Elegance of Typing Joy</a></li>
<li class="toctree-l2"><a class="reference internal" href="TypeChecking.html">Type Checking</a></li>
<li class="toctree-l2"><a class="reference internal" href="NoUpdates.html">No Updates</a></li>
<li class="toctree-l2"><a class="reference internal" href="Categorical.html">Categorical Programming</a></li>
<li class="toctree-l2"><a class="reference internal" href="The_Four_Operations.html">The Four Fundamental Operations of Definite Action</a></li>
<li class="toctree-l2"><a class="reference internal" href="Derivatives_of_Regular_Expressions.html">∂RE</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<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="Quadratic.html" title="previous chapter">Quadratic formula</a></li>
<li>Next: <a href="Recursion_Combinators.html" title="next chapter">Recursion Combinators</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer" role="contentinfo">
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">
<img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" />
</a>
<br />
<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>.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 4.4.0.
</div>
</body>
</html>