Update links on home front page.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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">'''</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">'defs.txt'</span><span class="p">),</span>
|
||||
<span class="n">encoding</span><span class="o">=</span><span class="s1">'UTF_8'</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">'''</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">'''A decorator to inscribe functions into the default dictionary.'''</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">'''</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 >] [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 >] 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 <=] [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> 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">'''</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">##'''\</span>
|
||||
<span class="c1">##PE1.1 == + dup [+] dip</span>
|
||||
<span class="c1">##PE1.2 == dup [3 & PE1.1] dip 2 >></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">##'''</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">'''Set name attribute.'''</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">'Not enough values on stack.'</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 "or" 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">'''</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"> '''</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">'''</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"> '''</span>
|
||||
<span class="c1"># At some point I decided that the definitions file should NOT</span>
|
||||
<span class="c1"># use '==' to separate the name from the body. But somehow the</span>
|
||||
<span class="c1"># xerblin\gui\default_joy_home\definitions.txt file didn'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 '=='.</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">'=='</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">"No '==' in definition text </span><span class="si">%r</span><span class="s2">"</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">'''</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"> '''</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">'''</span>
|
||||
<span class="sd"> Add the definition to the dictionary.</span>
|
||||
<span class="sd"> '''</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">'=='</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">'#'</span><span class="p">)</span>
|
||||
<span class="ow">and</span> <span class="s1">'=='</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">'#'</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">'''</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"> '''</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">'''Compiled GCD function.'''</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">></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">'''</span>
|
||||
<span class="sd"> divmod(x, y) -> (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"> '''</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>
|
||||
|
||||
@@ -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">'Not a list.'</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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
Binary file not shown.
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user