RosettaCodeData/Task/Anonymous-recursion/Lambdatalk/anonymous-recursion.lambdatalk

31 lines
769 B
Plaintext

1) defining a tail-recursive function:
{def fibo {lambda {:n}
{{lambda {:f :n :a :b} {:f :f :n :a :b}}
{lambda {:f :n :a :b}
{if {< :n 0}
then the number must be positive!
else {if {< :n 1}
then :a
else {:f :f {- :n 1} {+ :a :b} :a}}}} :n 1 0}}}
2) testing:
{fibo -1} -> the number must be positive!
{fibo 0} -> 1
{fibo 8} -> 34
{fibo 1000} -> 7.0330367711422765e+208
{map fibo {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}
then the number must be positive!
else {if {< :n 1}
then :a
else {:f :f {- :n 1} {+ :a :b} :a}}}} :n 1 0}}
8}
-> 34