2013-11-24 98 views
-1

我正在研究一个Lisp程序,该程序包含读取框尺寸的代码,然后从最短到最长的长度对它们进行排序(并将这些新长度中的每一个设置为新变量)。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)))))) 

我怎样才能改变我的代码,以便解释知道新-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))))) 

注:我已经初始化列表,B列表和C-列表前面为全局变量/列表被添加到后来。

再次感谢!

+0

当我运行你的函数,我得到了一个不同的错误:函数'next-part-of-program'是未定义的。在上面的代码中,符号'new-d1'不被用作函数。请用产生错误的实际代码更新您的问题。 – Kaz

+0

您可能已定义了“程序的下一部分”功能,这就是'new-d1'被调用或用作函数的地方。 – Kaz

+0

谢谢;我在我的代码中添加了下一个函数。 'new-d1'在这里用作函数还是可以在我的代码中更晚一些,比如'put-on-a-list'? – user1462294

回答

3

get-box最后一行应该是:

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

你不应该在围绕参数的括号来next-part-of-program

+0

+1;这将显示另一个错误:错误:变量B未绑定。 – henginy

+0

谢谢;非常感激! – user1462294

+0

在这种情况下,'变量B'是指在我的程序中早些时候引用了一个不同的变量B,还是在'下一部分程序'中引用了一个参数? – user1462294

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) #'<))))