【发布时间】:2018-11-15 15:35:23
【问题描述】:
这里的 Lisp 菜鸟,倾向于相信我肯定误解了某些东西,因为这是第二版相当长的书的第 35 页的问题。我一直在阅读let binding,所以让我通过引用他来确保作者*的意图是明确的:
在以下代码中,符号
pos用作临时存储 或以position的结果为值的变量 函数表达式。最后,我们将如何积累结果?递归调用应该给我们一个剩余位置的列表,所以找到的第一个应该放在前面。我们已经有一个函数可以做到这一点,cons函数
这是代码:
(defun all-pos (item seq start)
(let ((pos (position item seq :start start))
(if pos
(cons pos
(all-pos item seq (+ 1 pos)))
nil))))
这是错误:
Ch1_Notes.lisp:27:5:
error:
The LET binding spec (IF POS
(CONS POS (ALL-POS ITEM SEQ (+ 1 POS)))
NIL) is malformed.
Compilation failed.
这是不言而喻的错误吗?是否有一些前面的代码我也应该包括在内?
*作者 Ira J. Kalet 已经死了,所以我不能问他。
【问题讨论】:
-
确实是一个错误,但是在后面几页的代码(第25-27页)的以下版本中已修复(books.google.fr/books/about/…)
标签: syntax-error lisp common-lisp let