Or strictly speaking...
(de Fibonacci (N)
(let (Fib '(2 1 1))
(set Fib 2 (cdr Fib) 1 (cddr Fib) 1)
(cond
((= N 0) 0)
((= N 1) (caddr Fib))
((= N 2) (cadr Fib))
(T
(do (- N 3)
(rot Fib)
(set Fib (+ (cadr Fib) (caddr Fib)))
)
(car Fib))
) ) )
/Lindsay
On Sat, Mar 11, 2017 at 11:20 AM, Lindsay John Lawrence <
[email protected]> wrote:
> Nm... After tinkering in the debugger.. using 'pp etc..
> I get it. I am still getting the (= code data) in picolisp.
>
> This gives the results I wanted.
>
> (de Fibonacci (N)
> (let (Fib '(1 1 0) R 0)
> (do N
> (rot Fib)
> (set Fib (+ (cadr Fib) (caddr Fib)))
> )
> (setq R (car Fib))
> (set Fib 1 (cdr Fib) 1 (cddr Fib) 0)
> R
> ) )
>
> Now I can write...
>
> : (Fibonacci 1)
> -> 2
> : (Fibonacci 10)
> -> 144
> : (bench (nil (Fibonacci 100000)))
> 3.388 sec
> : (length (chop (Fibonacci 100000)))
> -> 20899 digits!
>
> Picolisp bignums are awesome!
>
> /Lindsay
>
>
>