2016-02-03 65 views
-1

我在Windows 7上使用clisp 2.49。我啓動命令窗口並使用.lisp文件導航到該目錄。然後我運行clisp並嘗試加載文件。我收到錯誤「沒有名稱爲C的包」。 C在這種情況下是指驅動器C,因爲填充的絕對路徑以C:/../../ lispFile開始。我也嘗試加載Allegro CL上的文件,但得到了同樣的錯誤。(已解決)lisp - 無法在Windows上加載.lisp文件

下面是錯誤消息的屏幕截圖。

error message

編輯: 我已經確定了的代碼,這是導致該錯誤消息的路線是:

(defparameter c:\\workdir\\aima\\ (truename "~/public_html/code/"); 
    "The root directory where the code is stored.") 

我不知道,如果語法不正確。

編輯2:我想出了我做錯了什麼。我得到了修改lisp文件的指示,但誤解了它,並替換了該行的錯誤部分。這是更正的代碼行。

(defparameter *aima-root* (truename "c:\\workdir\\aima\\"); 
    "The root directory where the code is stored.") 
+0

看起來更像是你的代碼嘗試使用不存在的包('(C:something ...)')。你能發佈文件的內容嗎? – jkiiski

+1

接下來,您將看看回溯:bt以查看它發生的位置。 –

+2

請發表自己的回答,而不是將「解決」放在題目中,並在你的問題中回答。 :) – CodeCaster

回答

2

注意,人們也可以在負載時間計算的目錄:

(defparameter *aima-root* 
    (when *load-pathname* 
    (make-pathname :defaults *load-pathname* 
        :name nil 
        :type nil)) 
    "The root directory where the code is stored.") 

*load-pathname*是一個標準的Common Lisp變量和將在負荷時間的限制,以類似於用於所述一個的路徑名load函數。因此它指向正在加載的文件。然後,我們構造一個新的路徑名,其缺省值將從加載路徑名填充,並且不包含名稱和路徑名類型組件。

因此,您可以根據該計算設置*aima-root*變量,並且只要您加載文件,就會計算出正確的目錄。

在加載時間內,有兩個Common Lisp變量*load-pathname**load-truename*。後者是文件的真實物理路徑名。通常我更喜歡使用*load-pathname*,這可能與物理路徑名結構無關。此處代碼使用功能truename,因此可能需要使用*load-truename*。 Common Lisp實現通常通過存儲路徑名來記錄定義函數和其他事物的位置。使用路徑名比稍後使用truename更容易找到文件 - 因爲它可以使用邏輯路徑名稱具有獨立於設備/機器的間接方向。