Update links on home front page.
This commit is contained in:
parent
f70f3a9064
commit
f96013d649
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
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue