Lisp - 不是预期的NUMBER类型

sda*_*das 2 lisp common-lisp

我在我的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正在返回一个列表 - 但是当我跟踪我头脑中的值时,该函数应该正常工作.因此,如果我滥用(或遗失)撇号,有人可以向我解释一下吗?

Hug*_*ugh 5

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

(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)

  • 或者只是`(+ n(问题(1+ n)))`,我不太明白需要在这里申请. (2认同)