4

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
4

3 に答える 3

1

ループ命令には多くの優れた機能があります。

(loop with a = 0 and b = 1 
      while (< a 4000000) 
      when (evenp a)
      sum a
      do (psetf a b b (+ a b)))

Common Lisp HyperSpec のリファレンスを参照してください

于 2013-05-02T11:39:49.127 に答える