31 lines
769 B
Plaintext
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
|