LISP中未定义的函数错误

时间:2013-11-24 03:12:52

标签: functional-programming lisp undefined-function

我正在研究一个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初始化为全局变量/列表,以便稍后添加。

再次感谢!

2 个答案:

答案 0 :(得分:3)

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

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

你不应该对next-part-of-program

的论据有所了解

答案 1 :(得分: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) #'<))))