lisp做循环因子代码

时间:2012-07-12 09:21:06

标签: lisp

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

我已完成上述代码,当我尝试fact(4)时,它会给我ans is 6。我不确定出了什么问题。谁能帮我?

2 个答案:

答案 0 :(得分:3)

更改为

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

基本上,你做的迭代次数少于必要。

答案 1 :(得分:3)

Mihai已经给出了答案。

我会把它写成:

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

Common Lisp具有适用于数字的所有常用算术谓词:=<>,...