Anonymous recursion: Difference between revisions

edit a lambdatalk task
(edit a lambdatalk task)
Line 1,662:
=={{header|Lambdatalk}}==
<lang scheme>
1) defining a tailquasi-recursive function combined with a simple Ω-combinator:
{def fibo {lambda {:n}
{{{lambda {:f :n :a :b} {:f :f :n :a :b}}
{lambda {:f :n :a :b}
{if {< :n 0}
Line 1,670:
else {if {< :n 1}
then :a
else {:f :f {- :n 1} {+ :a :b} :a}}}}} :n 1 0}}}
-> fibo
 
2) testing:
Line 1,677 ⟶ 1,678:
{fibo 8} -> 34
{fibo 1000} -> 7.0330367711422765e+208
{S.map fibo {S.serie 1 20}}
-> 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946
 
We could also avoid any name and write an IIFE
 
{{lambda {:n}
{{{lambda {:f :n :a :b} {:f :f :n :a :b}}
{lambda {:f :n :a :b}
{if {< :n 0}
Line 1,689 ⟶ 1,690:
else {if {< :n 1}
then :a
else {:f :f {- :n 1} {+ :a :b} :a}}}}} :n 1 0}}
8}
-> 34
 
</lang>