Type inference of Joy expressions.
More remains to be done but it seems to work.
This commit is contained in:
@@ -35,8 +35,10 @@
|
||||
<li><a href="joy/library.html">joy.library</a></li>
|
||||
<li><a href="joy/parser.html">joy.parser</a></li>
|
||||
<li><a href="joy/utils/generated_library.html">joy.utils.generated_library</a></li>
|
||||
<li><a href="joy/utils/polytypes.html">joy.utils.polytypes</a></li>
|
||||
<li><a href="joy/utils/pretty_print.html">joy.utils.pretty_print</a></li>
|
||||
<li><a href="joy/utils/stack.html">joy.utils.stack</a></li>
|
||||
<li><a href="joy/utils/types.html">joy.utils.types</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -127,7 +127,6 @@
|
||||
<span class="s1">of == swap at</span>
|
||||
<span class="s1">product == 1 swap [*] step</span>
|
||||
<span class="s1">flatten == [] swap [concat] step</span>
|
||||
<span class="s1">unit == [] cons</span>
|
||||
<span class="s1">quoted == [unit] dip</span>
|
||||
<span class="s1">unquoted == [i] dip</span>
|
||||
<span class="s1">enstacken == stack [clear] dip</span>
|
||||
@@ -153,13 +152,17 @@
|
||||
<span class="s1">anamorphism == [pop []] swap [dip swons] genrec</span>
|
||||
<span class="s1">range == [0 <=] [1 - dup] anamorphism</span>
|
||||
<span class="s1">while == swap [nullary] cons dup dipd concat loop</span>
|
||||
<span class="s1">dudipd == dup dipd</span>
|
||||
<span class="s1">dupdipd == dup dipd</span>
|
||||
<span class="s1">primrec == [i] genrec</span>
|
||||
<span class="s1">step_zero == 0 roll> step</span>
|
||||
<span class="s1">codireco == cons dip rest cons</span>
|
||||
<span class="s1">make_generator == [codireco] ccons</span>
|
||||
<span class="s1">ccons == cons cons</span>
|
||||
<span class="s1">'''</span>
|
||||
<span class="c1"># ifte == [nullary not] dipd branch</span>
|
||||
<span class="c1"># ifte == [nullary] dipd swap branch</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>
|
||||
@@ -605,12 +608,12 @@
|
||||
<span class="c1">## return second, (tos, stack)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="swaack"><a class="viewcode-back" href="../../library.html#joy.library.swaack">[docs]</a><span class="nd">@inscribe</span>
|
||||
<span class="nd">@SimpleFunctionWrapper</span>
|
||||
<span class="k">def</span> <span class="nf">swaack</span><span class="p">(</span><span class="n">stack</span><span class="p">):</span>
|
||||
<span class="sd">'''swap stack'''</span>
|
||||
<span class="n">old_stack</span><span class="p">,</span> <span class="n">stack</span> <span class="o">=</span> <span class="n">stack</span>
|
||||
<span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">old_stack</span></div>
|
||||
<span class="c1">##@inscribe</span>
|
||||
<span class="c1">##@SimpleFunctionWrapper</span>
|
||||
<span class="c1">##def swaack(stack):</span>
|
||||
<span class="c1">## '''swap stack'''</span>
|
||||
<span class="c1">## old_stack, stack = stack</span>
|
||||
<span class="c1">## return stack, old_stack</span>
|
||||
|
||||
|
||||
<span class="c1">##@inscribe</span>
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
<span class="c1"># RuntimeError: maximum recursion depth exceeded</span>
|
||||
<span class="c1"># on quotes longer than sys.getrecursionlimit().</span>
|
||||
|
||||
<span class="c1">## return (quote[0], concat(quote[1], expression)) if quote else expression</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">quote</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">concat</span><span class="p">(</span><span class="n">quote</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">expression</span><span class="p">))</span> <span class="k">if</span> <span class="n">quote</span> <span class="k">else</span> <span class="n">expression</span></div>
|
||||
|
||||
<span class="c1"># Original implementation.</span>
|
||||
|
||||
@@ -198,13 +198,13 @@
|
||||
<span class="c1"># In-lining is slightly faster (and won't break the</span>
|
||||
<span class="c1"># recursion limit on long quotes.)</span>
|
||||
|
||||
<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="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>
|
||||
<span class="n">expression</span> <span class="o">=</span> <span class="n">item</span><span class="p">,</span> <span class="n">expression</span>
|
||||
<span class="k">return</span> <span class="n">expression</span></div>
|
||||
<span class="c1">## temp = []</span>
|
||||
<span class="c1">## while quote:</span>
|
||||
<span class="c1">## item, quote = quote</span>
|
||||
<span class="c1">## temp.append(item)</span>
|
||||
<span class="c1">## for item in reversed(temp):</span>
|
||||
<span class="c1">## expression = item, expression</span>
|
||||
<span class="c1">## return expression</span>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user