【发布时间】:2013-12-08 19:30:05
【问题描述】:
我正在开发一个 Lisp 程序,其中包含读取框尺寸的代码,然后将它们从最短到最长排序(并将这些新长度中的每一个设置为新变量)。
当我尝试将文件加载到解释器中时,我收到以下错误:
- SYSTEM::%EXPAND-FORM: invalid form (40)
假设这个错误源于我的代码的第 40 行,这里是第 34-45 行:
(defun get-box ()
(let ((d1) (d2) (d3))
(setf d1 (read))
(setf d2 (read))
(setf d3 (read))
(list d1 d2 d3))
(if (= -1 d1)
(exit)
(setf new-d1 (first (sort (d1 d2 d3)) #'<))
(setf new-d2 (second (sort (d1 d2 d3)) #'<))
(setf new-d3 (third (sort (d1 d2 d3)) #'<))
(next-part-of-program (new-d1, new-d2, new-d3)))
此代码 sn-p 中的 if 语句在语法或语义上是否存在固有的错误? EXPAND-FORM 错误在 Lisp 中来自/意味着什么?
非常感谢任何帮助。谢谢!
【问题讨论】:
-
这个
(40)与行号无关。这意味着您的代码中的文字 40 位于不适当的位置,或者您用逗号评估的变量评估为 40。 -
哇,这肯定会改变一些事情。谢谢;我将在我的程序开始时进行调查,因为我确实将一些变量设置为值 40。
-
非常感谢您指出这一点。我发现我的错误来自没有初始化我设置为 40 的变量。再次感谢!!
-
这与other question 中的代码存在相同的问题(如果不是其他问题),
(sort (d1 d2 d3))将是一个错误,因为d1可能不是函数,而@987654329 @ 有一堆不属于的逗号(逗号?)。 -
if最多有三个参数,一个条件、一个 then-part 和一个(可选)else-part。你的if有一大堆。另请注意,您可以将(setf w x) (setf y z)组合成(setf w x y z)。
标签: if-statement functional-programming lisp common-lisp clisp