if-statement - LISP 中的错误 - SYSTEM::%EXPAND-FORM:无效形式 (40)

标签 if-statement functional-programming lisp common-lisp clisp

我正在开发一个 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)))

此代码段中的 if 语句在句法或语义上是否存在固有错误? EXPAND-FORM 错误在 Lisp 中来自/意味着什么?

非常感谢任何帮助。谢谢!

最佳答案

当您在 "SYS" 包(也称为 "SI""SYSTEM" 在不同的包中看到提及符号的消息时实现),特别是当符号是内部的(以两个冒号为前缀),而且它们的名称包含非字母数字字符(例如,%$)时,机会此消息是否特定于实现,您可以通过提及您正在使用的实现来帮助我们帮助您。

也就是说,我认为您正在使用 CLISP,在这种情况下,此 40 不会在您的文件中命名一行。

您在文件中的不适当位置有一个文字 40,或者您有一个值为 40 的变量,您在宏扩展期间用错位的逗号对其求值.

关于if-statement - LISP 中的错误 - SYSTEM::%EXPAND-FORM:无效形式 (40),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169921/

相关文章:

functional-programming - 用 OCaml 等函数式语言实现直接线程解释器

functional-programming - `targetChecked` 中的 Bool 如何变成 `Action` ?

algorithm - 我的迭代 expmod 实现有什么问题?

lisp - 如何使用 quicklisp 安装的包?

c# - C# 中的数字列表并获取最小值和最大值,而不保留上一个循环中存储的变量

java - java中的字符计数

c - 为什么这些排序标准之一起作用,而另一个不起作用?

java - 求数组中数字的平均值并找出大于平均值的数字

functional-programming - Ocaml - 将代码运行时编译为字符串

macros - 在 Lisp 中,作为 push 是对 cons 的追加是什么?