Lisp - 不是预期的NUMBER类型

时间:2012-01-10 23:06:18

标签: lisp common-lisp

我在Lisp代码中收到以下错误:

value (PROBLEM1 (+ N 1)) is not of the expected type NUMBER.

代码的目的是将最多1000个可被3或5整除的数字相加。

(defun problem1 (n)
  (if (< n 1000)
      (if (or (= 0 (mod n 3)) (= 0 (mod n 5))) 
      (apply '+ '(n (problem1 (+ n 1)))) 
      (apply '+ '(0 (problem1 (+ n 1)))))
   0))

我意识到错误可能是因为problem1正在返回一个列表 - 但是当我跟踪我头脑中的值时,该函数应该正常工作。因此,如果我滥用(或遗失)撇号,有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:5)

而不是错过',你有太多了。当你写

(apply '+ '(n (problem1 (+ n 1))))

您正尝试将+应用于包含符号n和未评估列表(problem1 (+ n 1))的列表。这是因为您引用了参数列表,'阻止了评估。你真正想要的是使用list,例如

(apply '+ (list n (problem1 (1+ n))))