0
(defun fact (n)
    (do
       ((i 1 (+ 1 i))
        (prod 1 (* i prod)))
       ((equal i n) prod)))

上記のコードを実行しましたが、試してみると、fact(4)が表示されますans is 6。何が問題なのかわかりません。誰でも私を助けることができますか?

4

2 に答える 2

3

ミハイはすでに答えを出している。

私はそれを次のように書きます:

(defun fact (n)
  (do ((i    1 (+ 1 i))
       (prod 1 (* i prod)))
      ((> i n) prod)))

Common Lisp には、数値に対して機能する通常の算術述語がすべてあります: =, <, >, ...

于 2012-07-12T10:43:32.017 に答える
3

への変更

(defun fact (n)
    (do
       ((i 1 (+ 1 i))
        (prod 1 (* i prod)))
       ((equal i (+ n 1)) prod)))

基本的に、必要以上に反復を 1 回実行していませんでした。

于 2012-07-12T09:29:51.803 に答える