2013-11-24 99 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) #'<))))