我在我的Lisp代码中收到以下错误:
value (PROBLEM1 (+ N 1)) is not of the expected type NUMBER.
Run Code Online (Sandbox Code Playgroud)
代码的目的是将所有可以被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))
Run Code Online (Sandbox Code Playgroud)
我意识到错误可能是因为problem1正在返回一个列表 - 但是当我跟踪我头脑中的值时,该函数应该正常工作.因此,如果我滥用(或遗失)撇号,有人可以向我解释一下吗?
而不是错过了',你有太多了.当你写作
(apply '+ '(n (problem1 (+ n 1))))
Run Code Online (Sandbox Code Playgroud)
您正尝试应用于+包含该符号n和未评估列表的列表(problem1 (+ n 1)).这是因为您引用了参数列表,并'阻止了评估.你真正想要的是使用list,例如
(apply '+ (list n (problem1 (1+ n))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |