【发布时间】:2012-01-10 23:06:18
【问题描述】:
我在 Lisp 代码中收到以下错误:
value (PROBLEM1 (+ N 1)) is not of the expected type NUMBER.
代码的目的是将所有能被 3 或 5 整除的数加起来,最大为 1000。
(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))
我意识到错误可能是因为问题 1 返回了一个列表 - 但是当我在脑海中跟踪值时,该函数应该可以正常工作。因此,如果我误用(或遗漏)撇号,有人可以向我解释吗?
【问题讨论】:
-
对不起,没有真正的帮助,但我正在学习 lisp (clojure),当我遇到这样的事情时,我会开始解构 repl 中的内容,直到我找出哪里出错了。
-
我相信问题在于,在最后的递归调用中,我会有类似:
(apply '+ (3 (3))... 但我不确定如何解决该列表。 -
只是扩展我的答案,但问题1 没有返回列表。它要么返回 0(如果最外面的
if的条件是nil),或者将+应用于列表的结果,该列表永远不会是列表。 -
这里没有理由一开始就使用 APPLY。只需拨打 +。
标签: lisp common-lisp