First-class functions/Use numbers analogously: Difference between revisions
First-class functions/Use numbers analogously (view source)
Revision as of 05:30, 24 March 2021
, 3 years ago→{{header|Phix}}: added syntax colouring the hard way
m (→{{header|Phix}}: added syntax colouring the hard way) |
|||
Line 1,187:
=={{header|Phix}}==
Just as there is no real support for first class functions, not much that is pertinent to this task for numbers either, but the manual way is just as trivial:
<!--<lang Phix>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">mtable</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{<span style="color: #0000FF;">}</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">multiplier<span style="color: #0000FF;">(<span style="color: #004080;">atom</span> <span style="color: #000000;">n1<span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">n2<span style="color: #0000FF;">)</span>
<span style="color: #000000;">mtable</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append<span style="color: #0000FF;">(<span style="color: #000000;">mtable<span style="color: #0000FF;">,<span style="color: #0000FF;">{<span style="color: #000000;">n1<span style="color: #0000FF;">,<span style="color: #000000;">n2<span style="color: #0000FF;">}<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">length<span style="color: #0000FF;">(<span style="color: #000000;">mtable<span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">call_multiplier<span style="color: #0000FF;">(<span style="color: #004080;">integer</span> <span style="color: #000000;">f<span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">m<span style="color: #0000FF;">)</span>
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{<span style="color: #000000;">n1<span style="color: #0000FF;">,<span style="color: #000000;">n2<span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">mtable<span style="color: #0000FF;">[<span style="color: #000000;">f<span style="color: #0000FF;">]</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">n1<span style="color: #0000FF;">*<span style="color: #000000;">n2<span style="color: #0000FF;">*<span style="color: #000000;">m</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2<span style="color: #0000FF;">,</span>
<span style="color: #000000;">xi</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0.5<span style="color: #0000FF;">,</span>
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">4<span style="color: #0000FF;">,</span>
<span style="color: #000000;">yi</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0.25<span style="color: #0000FF;">,</span>
<span style="color: #000000;">z</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">y<span style="color: #0000FF;">,</span>
<span style="color: #000000;">zi</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> <span style="color: #0000FF;">/</span> <span style="color: #0000FF;">(</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">y</span> <span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?<span style="color: #000000;">call_multiplier<span style="color: #0000FF;">(<span style="color: #000000;">multiplier<span style="color: #0000FF;">(<span style="color: #000000;">x<span style="color: #0000FF;">,<span style="color: #000000;">xi<span style="color: #0000FF;">)<span style="color: #0000FF;">,<span style="color: #000000;">0.5<span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?<span style="color: #000000;">call_multiplier<span style="color: #0000FF;">(<span style="color: #000000;">multiplier<span style="color: #0000FF;">(<span style="color: #000000;">y<span style="color: #0000FF;">,<span style="color: #000000;">yi<span style="color: #0000FF;">)<span style="color: #0000FF;">,<span style="color: #000000;">0.5<span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?<span style="color: #000000;">call_multiplier<span style="color: #0000FF;">(<span style="color: #000000;">multiplier<span style="color: #0000FF;">(<span style="color: #000000;">z<span style="color: #0000FF;">,<span style="color: #000000;">zi<span style="color: #0000FF;">)<span style="color: #0000FF;">,<span style="color: #000000;">0.5<span style="color: #0000FF;">)
<!--</lang>-->
{{out}}
<pre>
Line 1,218 ⟶ 1,220:
Compared to first class functions, there are (as in my view there should be) significant differences in the treatment of numbers and functions, but as mentioned on that page tagging ctable entries should be quite sufficient.
<!--<lang Phix>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">ctable</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{<span style="color: #0000FF;">}</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">compose<span style="color: #0000FF;">(<span style="color: #004080;">integer</span> <span style="color: #000000;">f<span style="color: #0000FF;">,</span> <span style="color: #000000;">g<span style="color: #0000FF;">)</span>
<span style="color: #000000;">ctable</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append<span style="color: #0000FF;">(<span style="color: #000000;">ctable<span style="color: #0000FF;">,<span style="color: #0000FF;">{<span style="color: #000000;">f<span style="color: #0000FF;">,<span style="color: #000000;">g<span style="color: #0000FF;">}<span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">cdx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length<span style="color: #0000FF;">(<span style="color: #000000;">ctable<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">cdx</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">call_composite<span style="color: #0000FF;">(<span style="color: #004080;">integer</span> <span style="color: #000000;">cdx<span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">x<span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{<span style="color: #000000;">f<span style="color: #0000FF;">,<span style="color: #000000;">g<span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ctable<span style="color: #0000FF;">[<span style="color: #000000;">cdx<span style="color: #0000FF;">]</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">f<span style="color: #0000FF;">(<span style="color: #000000;">g<span style="color: #0000FF;">(<span style="color: #000000;">x<span style="color: #0000FF;">)<span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">plus1<span style="color: #0000FF;">(<span style="color: #004080;">atom</span> <span style="color: #000000;">x<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">x<span style="color: #0000FF;">+<span style="color: #000000;">1</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">halve<span style="color: #0000FF;">(<span style="color: #004080;">atom</span> <span style="color: #000000;">x<span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">x<span style="color: #0000FF;">/<span style="color: #000000;">2</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">compose<span style="color: #0000FF;">(<span style="color: #000000;">halve<span style="color: #0000FF;">,<span style="color: #000000;">plus1<span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?<span style="color: #000000;">call_composite<span style="color: #0000FF;">(<span style="color: #000000;">m<span style="color: #0000FF;">,<span style="color: #000000;">1<span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- displays 1</span>
<span style="color: #0000FF;">?<span style="color: #000000;">call_composite<span style="color: #0000FF;">(<span style="color: #000000;">m<span style="color: #0000FF;">,<span style="color: #000000;">4<span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- displays 2.5
<!--</lang>-->
=={{header|PicoLisp}}==
|