【问题标题】:Undefined function error in LISPLISP 中的未定义函数错误
【发布时间】:2013-12-08 20:32:59
【问题描述】:

我正在开发一个 Lisp 程序,其中包含读取框尺寸的代码,然后将它们从最短到最长排序(并将这些新长度中的每一个设置为新变量)。

当我尝试将文件加载到解释器中时,出现以下错误:

*** - EVAL: undefined function NEW-D1

我很困惑为什么会收到此错误,因为 new-d1 不是函数,它是给定框最短边长度的变量。

这是 new-d1 首次初始化和设置的代码:

(defun get-box ()
  (let ((d1 0) (d2 0) (d3 0) (new-d1 0) (new-d2 0) (new-d3 0))
    (setf d1 (read))
    (setf d2 (read))
    (setf d3 (read))
    (if (= d1 -1)
        (exit)
        (progn
         (setq new-d1 (first  (sort (list d1 d2 d3) #'<)))
         (setq new-d2 (second (sort (list d1 d2 d3) #'<)))
         (setq new-d3 (third  (sort (list d1 d2 d3) #'<)))
         (next-part-of-program (new-d1 new-d2 new-d3))))))

如何更改我的代码,以便解释器知道 new-d1 不是函数并且不会将其视为函数?感谢您的帮助!

编辑添加:程序代码的下一部分:

(defun next-part-of-program(d1 d2 d3)
    (if (> d2 b)
        (put-on-c-list(d1 c-list))
        (if (> d2 a) and (< d2 c)
            (put-on-b-list (d1 b-list))
            (put-on-a-list (d1 a-list)))))

注意:我之前已将 a-list、b-list 和 c-list 初始化为稍后添加的全局变量/列表。

再次感谢!

【问题讨论】:

  • 当我运行你的函数时,我得到一个不同的错误:函数next-part-of-program 是未定义的。符号new-d1 在上述代码中没有用作函数。请使用产生错误的实际代码更新您的问题。
  • 您可能定义了 next-part-of-program 函数,而这就是 new-d1 被调用或以其他方式用作函数的地方。
  • 谢谢;我在代码中添加了下一个函数。 new-d1 是在这里用作函数,还是在我的代码中更晚使用,例如在 put-on-a-list 中?
  • 您应该学习如何使用您的 Lisp 调试器来发现您在评估中的位置(获得“回溯”)。这个练习是徒劳的;最终我们将完成您的整个程序。
  • Lisp function call syntax 的可能重复项

标签: functional-programming lisp undefined-function


【解决方案1】:

你可以写得短一点:

(defun get-box (&aux (d1 (read)) (d2 (read)) (d3 (read)))
  (if (= d1 -1)
      (exit)
    (apply #'next-part-of-program
           (sort (list d1 d2 d3) #'<))))

【讨论】:

    【解决方案2】:

    get-box 的最后一行应该是:

    (next-part-of-program new-d1 new-d2 new-d3)))))
    

    next-part-of-program 的参数不应该有括号

    【讨论】:

    • +1;这将揭示另一个错误:错误:变量 B 未绑定。
    • 谢谢;非常感谢!
    • 在这种情况下,variable B 是指我程序前面的不同变量 B 还是 next-part-of-program 的参数之一?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2016-08-21
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2023-03-07
    • 2022-11-16
    相关资源
    最近更新 更多