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 <
lawrence.lindsayj...@gmail.com> 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
>
>
>

Reply via email to