• Re: iterative-version for computing a Fibonacci number

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp,comp.lang.scheme on Thu Jun 26 01:56:40 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:

    Raffael Cavallaro wrote:

    Hi, perhaps someone can help me translate my Python version?

    (defun fib (x)
    (do ((a 0 b) ;; do loop variable a is initially 0, then b
    (b 1 (+ a b)) ;;loop variable b is initially 1 then a + b
    (i 1 (1+ i))) ;;loop index incremented by 1 each go round
    ((> i x) a))) ;;termination condition - when index passes x stop
    ;; and return a

    (defun fib-evens (limit)
    "find the sum of all the even fibonacci numbers less than 1 million"
    (loop for i from 1 ;;loop index starts at 1 implicitly incremented by 1
    as current = (fib i) ;;compute fib of the current index
    while (< current limit) ;;stop if index exceeds limit
    when (evenp current) sum current)) ;;sum all the even fibs and
    return this sum

    CL-USER> (time (fib-evens 1000000)) ;; time the sum of all the even
    fibs less than a million
    Evaluation took:
    0.0 seconds of real time
    8.e-6 seconds of user run time ;;; took about one
    onehundredthousandth of a second
    1.e-6 seconds of system run time
    0 page faults and
    0 bytes consed.
    1089154 ;; here's your answer

    It seems that in CL (COBOL-Like), one has to use a macro whose
    source measures more than 60 kilobytes.

    In a Lispy language, one can program a much shorter solution by
    simply using recursion.

    Gauche Scheme

    (define (sum-even-fibs limit)
    (let go ((a 0) (b 1))
    (if (>= b limit)
    0
    (+ (if (even? b) b 0) (go b (+ a b))))))

    (sum-even-fibs 999999)
    ===>
    1089154



    --- Synchronet 3.21d-Linux NewsLink 1.2