Update links on home front page.

This commit is contained in:
Simon Forman 2021-11-26 09:55:16 -08:00
parent f70f3a9064
commit f96013d649
12 changed files with 90 additions and 212 deletions

View File

@ -56,11 +56,14 @@
<span class="sd">returns a dictionary of Joy functions suitable for use with the joy()</span>
<span class="sd">function.</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="kn">from</span> <span class="nn">pkg_resources</span> <span class="kn">import</span> <span class="n">resource_stream</span>
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">TextIOWrapper</span>
<span class="kn">from</span> <span class="nn">inspect</span> <span class="kn">import</span> <span class="n">getdoc</span><span class="p">,</span> <span class="n">getmembers</span><span class="p">,</span> <span class="n">isfunction</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">count</span>
<span class="kn">import</span> <span class="nn">operator</span><span class="o">,</span> <span class="nn">math</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="vm">__name__</span> <span class="k">as</span> <span class="n">_joy_package_name</span>
<span class="kn">from</span> <span class="nn">.parser</span> <span class="kn">import</span> <span class="n">text_to_expression</span><span class="p">,</span> <span class="n">Symbol</span>
<span class="kn">from</span> <span class="nn">.utils</span> <span class="kn">import</span> <span class="n">generated_library</span> <span class="k">as</span> <span class="n">genlib</span>
<span class="kn">from</span> <span class="nn">.utils.errors</span> <span class="kn">import</span> <span class="p">(</span>
@ -77,6 +80,14 @@
<span class="p">)</span>
<span class="k">def</span> <span class="nf">default_defs</span><span class="p">(</span><span class="n">dictionary</span><span class="p">):</span>
<span class="n">def_stream</span> <span class="o">=</span> <span class="n">TextIOWrapper</span><span class="p">(</span>
<span class="n">resource_stream</span><span class="p">(</span><span class="n">_joy_package_name</span><span class="p">,</span> <span class="s1">&#39;defs.txt&#39;</span><span class="p">),</span>
<span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;UTF_8&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">Def</span><span class="o">.</span><span class="n">load_definitions</span><span class="p">(</span><span class="n">def_stream</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)</span>
<span class="n">HELP_TEMPLATE</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1">==== Help on </span><span class="si">%s</span><span class="s1"> ====</span>
@ -91,9 +102,9 @@
<span class="n">_dictionary</span> <span class="o">=</span> <span class="p">{}</span>
<div class="viewcode-block" id="inscribe"><a class="viewcode-back" href="../../library.html#joy.library.inscribe">[docs]</a><span class="k">def</span> <span class="nf">inscribe</span><span class="p">(</span><span class="n">function</span><span class="p">):</span>
<div class="viewcode-block" id="inscribe"><a class="viewcode-back" href="../../library.html#joy.library.inscribe">[docs]</a><span class="k">def</span> <span class="nf">inscribe</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">d</span><span class="o">=</span><span class="n">_dictionary</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;A decorator to inscribe functions into the default dictionary.&#39;&#39;&#39;</span>
<span class="n">_dictionary</span><span class="p">[</span><span class="n">function</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">function</span>
<span class="n">d</span><span class="p">[</span><span class="n">function</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">function</span>
<span class="k">return</span> <span class="n">function</span></div>
@ -144,88 +155,6 @@
<span class="n">D</span><span class="p">[</span><span class="n">alias</span><span class="p">]</span> <span class="o">=</span> <span class="n">F</span></div>
<span class="n">definitions</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&#39;&#39;</span><span class="se">\</span>
<span class="s1">? == dup truthy</span>
<span class="s1">*fraction == [uncons] dip uncons [swap] dip concat [*] infra [*] dip cons</span>
<span class="s1">*fraction0 == concat [[swap] dip * [*] dip] infra</span>
<span class="s1">anamorphism == [pop []] swap [dip swons] genrec</span>
<span class="s1">average == [sum 1.0 *] [size] cleave /</span>
<span class="s1">binary == nullary [popop] dip</span>
<span class="s1">cleave == fork [popd] dip</span>
<span class="s1">codireco == cons dip rest cons</span>
<span class="s1">dinfrirst == dip infra first</span>
<span class="s1">unstack == ? [uncons ?] loop pop</span>
<span class="s1">down_to_zero == [0 &gt;] [dup --] while</span>
<span class="s1">dupdipd == dup dipd</span>
<span class="s1">enstacken == stack [clear] dip</span>
<span class="s1">flatten == [] swap [concat] step</span>
<span class="s1">fork == [i] app2</span>
<span class="s1">gcd == 1 [tuck modulus dup 0 &gt;] loop pop</span>
<span class="s1">ifte == [nullary not] dipd branch</span>
<span class="s1">ii == [dip] dupdip i</span>
<span class="s1">least_fraction == dup [gcd] infra [div] concat map</span>
<span class="s1">make_generator == [codireco] ccons</span>
<span class="s1">nullary == [stack] dinfrirst</span>
<span class="s1">of == swap at</span>
<span class="s1">pam == [i] map</span>
<span class="s1">tailrec == [i] genrec</span>
<span class="s1">product == 1 swap [*] step</span>
<span class="s1">quoted == [unit] dip</span>
<span class="s1">range == [0 &lt;=] [1 - dup] anamorphism</span>
<span class="s1">range_to_zero == unit [down_to_zero] infra</span>
<span class="s1">run == [] swap infra</span>
<span class="s1">size == 0 swap [pop ++] step</span>
<span class="s1">sqr == dup mul</span>
<span class="s1">step_zero == 0 roll&gt; step</span>
<span class="s1">swoncat == swap concat</span>
<span class="s1">tailrec == [i] genrec</span>
<span class="s1">ternary == unary [popop] dip</span>
<span class="s1">unary == nullary popd</span>
<span class="s1">unquoted == [i] dip</span>
<span class="s1">while == swap [nullary] cons dup dipd concat loop</span>
<span class="s1">&#39;&#39;&#39;</span>
<span class="c1">#</span>
<span class="c1">#</span>
<span class="c1"># ifte == [nullary] dipd swap branch</span>
<span class="c1"># genrec == [[genrec] cons cons cons cons] nullary swons concat ifte</span>
<span class="c1"># Another definition for while. FWIW</span>
<span class="c1"># while == over [[i] dip nullary] ccons [nullary] dip loop</span>
<span class="c1">##ccons == cons cons</span>
<span class="c1">##unit == [] cons</span>
<span class="c1">##second == rest first</span>
<span class="c1">##third == rest rest first</span>
<span class="c1">##swons == swap cons</span>
<span class="c1">##Zipper</span>
<span class="c1">##z-down == [] swap uncons swap</span>
<span class="c1">##z-up == swons swap shunt</span>
<span class="c1">##z-right == [swons] cons dip uncons swap</span>
<span class="c1">##z-left == swons [uncons swap] dip swap</span>
<span class="c1">##Quadratic Formula</span>
<span class="c1">##divisor == popop 2 *</span>
<span class="c1">##minusb == pop neg</span>
<span class="c1">##radical == swap dup * rollup * 4 * - sqrt</span>
<span class="c1">##root1 == + swap /</span>
<span class="c1">##root2 == - swap /</span>
<span class="c1">##q0 == [[divisor] [minusb] [radical]] pam</span>
<span class="c1">##q1 == [[root1] [root2]] pam</span>
<span class="c1">##quadratic == [q0] ternary i [q1] ternary</span>
<span class="c1"># Project Euler</span>
<span class="c1">##&#39;&#39;&#39;\</span>
<span class="c1">##PE1.1 == + dup [+] dip</span>
<span class="c1">##PE1.2 == dup [3 &amp; PE1.1] dip 2 &gt;&gt;</span>
<span class="c1">##PE1.3 == 14811 swap [PE1.2] times pop</span>
<span class="c1">##PE1 == 0 0 66 [7 PE1.3] times 4 PE1.3 pop</span>
<span class="c1">##&#39;&#39;&#39;</span>
<span class="c1">#PE1.2 == [PE1.1] step</span>
<span class="c1">#PE1 == 0 0 66 [[3 2 1 3 1 2 3] PE1.2] times [3 2 1 3] PE1.2 pop</span>
<span class="p">)</span>
<div class="viewcode-block" id="FunctionWrapper"><a class="viewcode-back" href="../../library.html#joy.library.FunctionWrapper">[docs]</a><span class="k">def</span> <span class="nf">FunctionWrapper</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Set name attribute.&#39;&#39;&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">:</span>
@ -256,12 +185,13 @@
<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="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">StackUnderflowError</span><span class="p">(</span><span class="s1">&#39;Not enough values on stack.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
<span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span>
<span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)</span> <span class="c1"># Because bools are ints in Python.</span>
<span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)</span>
<span class="p">):</span>
<span class="k">raise</span> <span class="n">NotAnIntError</span>
<span class="c1"># Boolean predicates like &quot;or&quot; fail here. :(</span>
<span class="c1">## if ( not isinstance(a, int)</span>
<span class="c1">## or not isinstance(b, int)</span>
<span class="c1">## or isinstance(a, bool) # Because bools are ints in Python.</span>
<span class="c1">## or isinstance(b, bool)</span>
<span class="c1">## ):</span>
<span class="c1">## raise NotAnIntError</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">stack</span><span class="p">),</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span>
<span class="k">return</span> <span class="n">inner</span></div>
@ -280,16 +210,16 @@
<span class="k">return</span> <span class="n">inner</span></div>
<div class="viewcode-block" id="DefinitionWrapper"><a class="viewcode-back" href="../../library.html#joy.library.DefinitionWrapper">[docs]</a><span class="k">class</span> <span class="nc">DefinitionWrapper</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="Def"><a class="viewcode-back" href="../../library.html#joy.library.Def">[docs]</a><span class="k">class</span> <span class="nc">Def</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Provide implementation of defined functions, and some helper methods.</span>
<span class="sd"> Definitions created by inscribe.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">body_text</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">body</span> <span class="o">=</span> <span class="n">text_to_expression</span><span class="p">(</span><span class="n">body_text</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_body</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">iter_stack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">doc</span> <span class="ow">or</span> <span class="n">body_text</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">body</span> <span class="o">=</span> <span class="n">body</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_body</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">iter_stack</span><span class="p">(</span><span class="n">body</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">expression_to_string</span><span class="p">(</span><span class="n">body</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_compiled</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
@ -298,59 +228,15 @@
<span class="n">expression</span> <span class="o">=</span> <span class="n">list_to_stack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_body</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
<span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span>
<div class="viewcode-block" id="DefinitionWrapper.parse_definition"><a class="viewcode-back" href="../../library.html#joy.library.DefinitionWrapper.parse_definition">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">parse_definition</span><span class="p">(</span><span class="n">class_</span><span class="p">,</span> <span class="n">defi</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Given some text describing a Joy function definition parse it and</span>
<span class="sd"> return a DefinitionWrapper.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="c1"># At some point I decided that the definitions file should NOT</span>
<span class="c1"># use &#39;==&#39; to separate the name from the body. But somehow the</span>
<span class="c1"># xerblin\gui\default_joy_home\definitions.txt file didn&#39;t get</span>
<span class="c1"># the memo. Nor did the load_definitions() method.</span>
<span class="c1"># So I think the simplest way forward at the moment will be to</span>
<span class="c1"># edit this function to expect &#39;==&#39;.</span>
<span class="n">name</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="n">body</span> <span class="o">=</span> <span class="n">defi</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;==&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">part</span><span class="p">:</span>
<span class="k">return</span> <span class="n">class_</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">body</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;No &#39;==&#39; in definition text </span><span class="si">%r</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">defi</span><span class="p">,))</span></div>
<span class="c1"># return class_(*(n.strip() for n in defi.split(None, 1)))</span>
<div class="viewcode-block" id="DefinitionWrapper.add_definitions"><a class="viewcode-back" href="../../library.html#joy.library.DefinitionWrapper.add_definitions">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">add_definitions</span><span class="p">(</span><span class="n">class_</span><span class="p">,</span> <span class="n">defs</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Scan multi-line string defs for definitions and add them to the</span>
<span class="sd"> dictionary.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">for</span> <span class="n">definition</span> <span class="ow">in</span> <span class="n">_text_to_defs</span><span class="p">(</span><span class="n">defs</span><span class="p">):</span>
<span class="n">class_</span><span class="o">.</span><span class="n">add_def</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)</span></div>
<div class="viewcode-block" id="DefinitionWrapper.add_def"><a class="viewcode-back" href="../../library.html#joy.library.DefinitionWrapper.add_def">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">add_def</span><span class="p">(</span><span class="n">class_</span><span class="p">,</span> <span class="n">definition</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">,</span> <span class="n">fail_fails</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Add the definition to the dictionary.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="n">F</span> <span class="o">=</span> <span class="n">class_</span><span class="o">.</span><span class="n">parse_definition</span><span class="p">(</span><span class="n">definition</span><span class="p">)</span>
<span class="n">dictionary</span><span class="p">[</span><span class="n">F</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">F</span></div>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">load_definitions</span><span class="p">(</span><span class="n">class_</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span> <span class="k">if</span> <span class="s1">&#39;==&#39;</span> <span class="ow">in</span> <span class="n">line</span><span class="p">]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">:</span>
<span class="n">class_</span><span class="o">.</span><span class="n">add_def</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_text_to_defs</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span>
<span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="k">if</span> <span class="n">line</span>
<span class="ow">and</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">)</span>
<span class="ow">and</span> <span class="s1">&#39;==&#39;</span> <span class="ow">in</span> <span class="n">line</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">load_definitions</span><span class="p">(</span><span class="n">class_</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">stream</span><span class="p">:</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">):</span>
<span class="k">continue</span>
<span class="n">name</span><span class="p">,</span> <span class="n">body</span> <span class="o">=</span> <span class="n">text_to_expression</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="c1">## if name not in dictionary:</span>
<span class="c1">## inscribe(class_(name, body), dictionary)</span>
<span class="n">inscribe</span><span class="p">(</span><span class="n">class_</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">body</span><span class="p">),</span> <span class="n">dictionary</span><span class="p">)</span></div>
<span class="c1">#</span>
@ -363,16 +249,14 @@
<span class="k">def</span> <span class="nf">inscribe_</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> Create a new Joy function definition in the Joy dictionary. A</span>
<span class="sd"> definition is given as a string with a name followed by a double</span>
<span class="sd"> equal sign then one or more Joy functions, the body. for example:</span>
<span class="sd"> definition is given as a quote with a name followed by a Joy</span>
<span class="sd"> expression. for example:</span>
<span class="sd"> sqr == dup mul</span>
<span class="sd"> [sqr dup mul] inscribe</span>
<span class="sd"> If you want the definition to persist over restarts, enter it into</span>
<span class="sd"> the definitions.txt resource.</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="n">definition</span><span class="p">,</span> <span class="n">stack</span> <span class="o">=</span> <span class="n">stack</span>
<span class="n">DefinitionWrapper</span><span class="o">.</span><span class="n">add_def</span><span class="p">(</span><span class="n">definition</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">,</span> <span class="n">fail_fails</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">body</span><span class="p">),</span> <span class="n">stack</span> <span class="o">=</span> <span class="n">stack</span>
<span class="n">inscribe</span><span class="p">(</span><span class="n">Def</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">body</span><span class="p">),</span> <span class="n">dictionary</span><span class="p">)</span>
<span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span></div>
@ -469,6 +353,19 @@
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">stack</span></div>
<div class="viewcode-block" id="gcd2"><a class="viewcode-back" href="../../library.html#joy.library.gcd2">[docs]</a><span class="nd">@inscribe</span>
<span class="nd">@FunctionWrapper</span>
<span class="k">def</span> <span class="nf">gcd2</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Compiled GCD function.&#39;&#39;&#39;</span>
<span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="p">(</span><span class="n">v2</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">tos</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">while</span> <span class="n">tos</span><span class="p">:</span>
<span class="n">v3</span> <span class="o">=</span> <span class="n">v2</span> <span class="o">%</span> <span class="n">v1</span>
<span class="n">tos</span> <span class="o">=</span> <span class="n">v3</span> <span class="o">&gt;</span> <span class="mi">0</span>
<span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="p">(</span><span class="n">v2</span><span class="p">,</span> <span class="n">stack</span><span class="p">))</span> <span class="o">=</span> <span class="p">(</span><span class="n">v3</span><span class="p">,</span> <span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">stack</span><span class="p">))</span>
<span class="k">return</span> <span class="p">(</span><span class="n">v2</span><span class="p">,</span> <span class="n">stack</span><span class="p">),</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span></div>
<div class="viewcode-block" id="choice"><a class="viewcode-back" href="../../library.html#joy.library.choice">[docs]</a><span class="nd">@inscribe</span>
<span class="nd">@SimpleFunctionWrapper</span>
<span class="k">def</span> <span class="nf">choice</span><span class="p">(</span><span class="n">stack</span><span class="p">):</span>
@ -721,7 +618,7 @@
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd"> divmod(x, y) -&gt; (quotient, remainder)</span>
<span class="sd"> Return the tuple (x//y, x%y). Invariant: div*y + mod == x.</span>
<span class="sd"> Return the tuple (x//y, x%y). Invariant: q * y + r == x.</span>
<span class="sd"> &#39;&#39;&#39;</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">S</span>
<span class="n">d</span><span class="p">,</span> <span class="n">m</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
@ -1497,9 +1394,6 @@
<span class="n">add_aliases</span><span class="p">(</span><span class="n">_dictionary</span><span class="p">,</span> <span class="n">ALIASES</span><span class="p">)</span>
<span class="n">DefinitionWrapper</span><span class="o">.</span><span class="n">add_definitions</span><span class="p">(</span><span class="n">definitions</span><span class="p">,</span> <span class="n">_dictionary</span><span class="p">)</span>
</pre></div>
</div>

View File

@ -210,7 +210,7 @@
<span class="n">temp</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">quote</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">quote</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">NotAListError</span><span class="p">(</span><span class="s1">&#39;Not a list.&#39;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">NotAListError</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">quote</span><span class="p">))</span>
<span class="n">item</span><span class="p">,</span> <span class="n">quote</span> <span class="o">=</span> <span class="n">quote</span>
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">temp</span><span class="p">):</span>

View File

@ -53,16 +53,18 @@ Continue with :doc:`the introduction <notebooks/Intro>`.
Project Hosted on `OSDN`_
-------------------------
* `Source Repository`_ (Mercurial)
* `Bug tracker`_
* `Source Repository`_ (`mirror`_)
* `Bug tracker`_ (`old tracker`_)
* `Forums`_
* `Mailing list`_
.. _Bug tracker: https://osdn.net/projects/joypy/ticket/
.. _Bug tracker: https://todo.sr.ht/~sforman/thun-der
.. _old tracker: https://osdn.net/projects/joypy/ticket/
.. _Forums: https://osdn.net/projects/joypy/forums/
.. _Mailing list: https://osdn.net/projects/joypy/lists/
.. _OSDN: https://osdn.net/projects/joypy/
.. _Source Repository: https://osdn.net/projects/joypy/scm/hg/Joypy/tree/tip/
.. _Source Repository: https://osdn.net/projects/joypy/scm/git/Thun/
.. _mirror: https://github.com/calroc/Thun
Information on the Joy language

View File

@ -63,14 +63,10 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.library.add_aliases">add_aliases() (in module joy.library)</a>
</li>
<li><a href="library.html#joy.library.DefinitionWrapper.add_def">add_def() (joy.library.DefinitionWrapper class method)</a>
</li>
<li><a href="library.html#joy.library.DefinitionWrapper.add_definitions">add_definitions() (joy.library.DefinitionWrapper class method)</a>
<li><a href="library.html#joy.library.app1">app1() (in module joy.library)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.library.app1">app1() (in module joy.library)</a>
</li>
<li><a href="library.html#joy.library.app2">app2() (in module joy.library)</a>
</li>
<li><a href="library.html#joy.library.app3">app3() (in module joy.library)</a>
@ -119,7 +115,7 @@
<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.library.DefinitionWrapper">DefinitionWrapper (class in joy.library)</a>
<li><a href="library.html#joy.library.Def">Def (class in joy.library)</a>
</li>
<li><a href="library.html#joy.library.dip">dip() (in module joy.library)</a>
</li>
@ -177,6 +173,8 @@
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.library.gcd2">gcd2() (in module joy.library)</a>
</li>
<li><a href="library.html#joy.library.genrec">genrec() (in module joy.library)</a>
</li>
</ul></td>
@ -325,8 +323,6 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.library.parse">parse() (in module joy.library)</a>
</li>
<li><a href="library.html#joy.library.DefinitionWrapper.parse_definition">parse_definition() (joy.library.DefinitionWrapper class method)</a>
</li>
<li><a href="parser.html#joy.parser.ParseError">ParseError</a>
</li>
@ -336,10 +332,10 @@
</li>
<li><a href="library.html#joy.utils.generated_library.pop">pop() (in module joy.utils.generated_library)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.utils.generated_library.popd">popd() (in module joy.utils.generated_library)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="library.html#joy.utils.generated_library.popdd">popdd() (in module joy.utils.generated_library)</a>
</li>
<li><a href="library.html#joy.utils.generated_library.popop">popop() (in module joy.utils.generated_library)</a>

View File

@ -69,8 +69,8 @@ itself.</p>
<section id="project-hosted-on-osdn">
<h2>Project Hosted on <a class="reference external" href="https://osdn.net/projects/joypy/">OSDN</a><a class="headerlink" href="#project-hosted-on-osdn" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://osdn.net/projects/joypy/scm/hg/Joypy/tree/tip/">Source Repository</a> (Mercurial)</p></li>
<li><p><a class="reference external" href="https://osdn.net/projects/joypy/ticket/">Bug tracker</a></p></li>
<li><p><a class="reference external" href="https://osdn.net/projects/joypy/scm/git/Thun/">Source Repository</a> (<a class="reference external" href="https://github.com/calroc/Thun">mirror</a>)</p></li>
<li><p><a class="reference external" href="https://todo.sr.ht/~sforman/thun-der">Bug tracker</a> (<a class="reference external" href="https://osdn.net/projects/joypy/ticket/">old tracker</a>)</p></li>
<li><p><a class="reference external" href="https://osdn.net/projects/joypy/forums/">Forums</a></p></li>
<li><p><a class="reference external" href="https://osdn.net/projects/joypy/lists/">Mailing list</a></p></li>
</ul>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -53,16 +53,18 @@ Continue with :doc:`the introduction <notebooks/Intro>`.
Project Hosted on `OSDN`_
-------------------------
* `Source Repository`_ (Mercurial)
* `Bug tracker`_
* `Source Repository`_ (`mirror`_)
* `Bug tracker`_ (`old tracker`_)
* `Forums`_
* `Mailing list`_
.. _Bug tracker: https://osdn.net/projects/joypy/ticket/
.. _Bug tracker: https://todo.sr.ht/~sforman/thun-der
.. _old tracker: https://osdn.net/projects/joypy/ticket/
.. _Forums: https://osdn.net/projects/joypy/forums/
.. _Mailing list: https://osdn.net/projects/joypy/lists/
.. _OSDN: https://osdn.net/projects/joypy/
.. _Source Repository: https://osdn.net/projects/joypy/scm/hg/Joypy/tree/tip/
.. _Source Repository: https://osdn.net/projects/joypy/scm/git/Thun/
.. _mirror: https://github.com/calroc/Thun
Information on the Joy language