在lisp中总结甚至斐波那契数字

lig*_*ike 4 lisp loops common-lisp

我刚刚开始学习Lisp,我正在解决一些Project Euler问题.我被困在那个你将偶数斐波那契数字加到最大数字之下的那个.我尝试过的事情如下.我读过这篇文章,但我仍然不确定为什么我的方法都不起作用!

CL-USER> (defun sum-even-fibs (max)
           (do ((curr 0 next)
                (next 1 (+ curr next))
                (sum  0 (if (evenp curr) (+ sum curr))))
               ((> max curr) sum)))
SUM-EVEN-FIBS
CL-USER> (sum-even-fibs 10)
0


CL-USER> (defun sum-even-fibs (max)
           (let ((sum 0))
             (do ((curr 0 next)
                  (next 1 (+ curr next)))
                 ((> max curr))
               (if (evenp curr) 
                   (setq sum (+ sum curr))))
             (format t "~d" sum)))
SUM-EVEN-FIBS
CL-USER> (sum-even-fibs 10)
0
NIL
Run Code Online (Sandbox Code Playgroud)

Rai*_*wig 5

arbautjc的答案稍微"更好"的版本:

(loop for a = 0 then b and b = 1 then (+ a b) 
      while (< a 4000000) 
      when (evenp a) sum a)
Run Code Online (Sandbox Code Playgroud)