BallKa
BallKa

Reputation: 13

Common Lisp - SLIME in infinte loop

I have started to learn Common Lisp a few days ago reading the book from Peter Seibel. I have downloaded the lispbox-0.7 for Windows and tried out some of the concepts in the SLIME REPL.

Now I'm at chapter 7. Macros and Standard Control Structures / Loops and I found this intressting do expression for the 11th Fibonacci number

(do ((n 0 (1+ n))
 (cur 0 next)
 (next 1 (+ cur next)))
((= 10 n) cur))

I defined following function

(defun fib (n) (do ((i 1 (1+ i)) (cur 0 next) (next 1 (+ cur next))) ((= n i) cur)))

The function does what I expected and returns the nth Fibonacci number. Now for curiosity i tried summing the first 10 fibonacci numbers using a dotimes loop

(let ((sum 0)) (dotimes (k 10) (setf sum (+ sum (fib k)))) sum)

But this expression runs indefinitly and i don't understand why. Maybe here is another concept I don't know. I tried a simpler example like

(dotimes (k 10) (fib k))

which should return NIL. But this also runs indefinitly. Can someone explain to me what I am missing?

Thx

Upvotes: 0

Views: 54

Answers (1)

BallKa
BallKa

Reputation: 13

Ok, nevermind, was not carefull enougth. the code tries to evaluate fib 0, but the test condition in do cannot be fulfilled. Thats why it runs indefinitly

fixing it by (fib (+ k 1))

Upvotes: 0

Related Questions