我在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正在返回一个列表 - 但是当我跟踪我头脑中的值时,该函数应该正常工作。因此,如果我滥用(或遗失)撇号,有人可以向我解释一下吗?
答案 0 :(得分:5)
而不是错过'
,你有太多了。当你写
(apply '+ '(n (problem1 (+ n 1))))
您正尝试将+
应用于包含符号n
和未评估列表(problem1 (+ n 1))
的列表。这是因为您引用了参数列表,'
阻止了评估。你真正想要的是使用list
,例如
(apply '+ (list n (problem1 (1+ n))))