2009-07-10 48 views
7

如果你不在乎並且只想看到問題,這裏是後面的故事跳到底部。關於Lisp和軟件包的新手問題

所以我一直在LISP玩了一會兒。一些基本功能,一些類和文件IO。當我碰到本文運行:

http://www.adampetersen.se/articles/lispweb.htm

而且我很高興能嘗試使用口齒不清的Web應用程序。我去下載軟件包,但在我的生活中,不知道如何將它們加載到我的Allegro IDE中。

嗯...好的,hunchentoot網站上說很多基本軟件包都在LispWorks中。所以我下載了。仍然不確定如何獲取我下載到這些IDE中的軟件包的源代碼。他們似乎有包的二進制文件?

噢,也許病了切換到我的Ubuntu服務器和apt-get所有的軟件包和安裝粘液(我以前沒有用過,因爲我只是想學習lisp,同時學習emacs和lisp似乎真的讓人望而生畏) 。我可以得到所有需要的軟件包並加載泥漿,再次出現同樣的問題。

我挖掘一些,看到這個程序稱爲ASDF。看起來ASDF是lisp的某種包裝生成器嗎?我不知道這似乎令人困惑。在這一點上,我即將放棄。


如果你還在閱讀這裏,這是我的問題。
1.如何將這些軟件包的源代碼加載到我的lisp環境中。試圖學習lisp並不是太難,但有關環境的信息一直很少。我需要使用ASDF構建我下載的軟件包嗎?
2.是否有一個簡單的方法讓某人只需在lisp中啓動並運行,而不必在前期學習所有工具時加快大量時間?

回答

8

嗯......好了,好了hunchentoot網站 說了很多基本的包都是在LispWorks 。所以我下載了。

這只是表示作者在Hunchentoot中編寫了很多Lispworks特定的代碼。這並不意味着Hunchentoot只能在Lispworks上運行。

仍然不知道如何獲得我下載到這些IDE中的軟件包的源代碼。

您需要使用ASDF。

他們似乎有包的二進制文件?

這不太可能。

哦,那也許是因爲生病切換到我的Ubuntu的服務器和apt-get所有包和設置煤泥>(我以前沒有使用過它,因爲我只是想學口齒不清。學習Emacs和LISP 在同一時間似乎真正令人畏懼)。

不要這樣做。你不需要使用Emacs或者Slime。

我可以得到所有需要的軟件包並加載了粘液並且再次出現同樣的問題,但沒有 可用。

立竿見影的效果嘗試clbuild:http://common-lisp.net/project/clbuild/

我周圍挖多一些,看這個節目叫ASDF。它看起來像ASDF是一些 種類的Lisp包生成器?我不知道這似乎令人困惑。

ASDF有點像Common Lisp應用程序的Makefile。

我即將放棄在這一點上。

這是關於最糟糕的事情(在這個或任何其他點)。我很高興你決定在這裏發佈你的問題。

  1. 如何將這些軟件包的源代碼加載到我的lisp環境中。 試圖學習lisp並不是太難,但有關 環境的信息一直很少。我需要使用ASDF構建我下載的軟件包嗎?

clbuild應該給你所有你需要的,但這裏有一些提示,如果你不想使用它:

  1. CLISP,SBCL:ASDF是你的Lisp的一部分。運行(require :asdf)。 Lispworks,Allegro:您需要下載並加載ASDF。保存asdf.lisp然後運行(load "/path/to/asdf.lisp")
  2. 對於每個圖書館/應用程序(ASDF中的「系統」說),您需要下載並將其解壓到某個地方。重複,直到滿足所有依賴關係。記下這些地方(目錄)。
  3. 對於來自第2步的每個地方,添加該地點到ASDF註冊表:(push "/path/to/dir/" asdf:*central-registry*)。不要忘記最後的斜線。
  4. 使用(asdf:oos 'asdf:load-op :system-name)加載系統。
  • 有一個簡單的方法有人剛起牀和口齒不清的運行而無需加快前期大量的時間學習所有的工具?
  • 請參閱上面的使用clbuild。

    +1

    第4步現在可以(asdf:load-sys:system-name)。 – Svante 2009-07-11 06:58:24

    6

    Ubuntu中最快捷的方法是使用該分發包中包含的軟件包。如果你只是想嘗試一些東西,這是「OK」,但這些版本通常比較陳舊。我會推薦包裝sbclslime。如果你還不知道emacs,你可以通過它的內置教程(C-h t(按下Control-h,釋放,然後按t))很快進入。然後你可以啓動emacs,啓動粘液(通過M-x slime),打開一個lisp文件(C-x C-f ~/lisp/first-try.lisp),然後就可以開始了。作爲Lisp的教程,我認爲Practical Common Lisp是一本非常好的書,並且免費提供。

    現在,當你喜歡Lisp時,你可能需要更多的最新軟件包。我建議使用clbuild(請參閱鏈接瞭解更多信息,包括常見問題解答)。然後你也可以建立一個新的sbcl(由發行版本引導)。順便說一下,這只是一個系統定義工具。它不知道如何下載軟件包,它只知道如何將系統加載到正在運行的Lisp映像中。換句話說,它只是解決了以正確的順序自動加載一些「系統」(庫)組成的多個文件的問題。最新版本允許加載一個包(在它被安裝後,例如,通過clbuild)用一個簡單的

    (asdf:load-sys 'foo) 
    

    舊版本顯示ASDF運營的內部概念:

    (asdf:operate 'asdf:load-op 'foo) 
    

    以上load-sys是這種常見情況的簡寫。更多信息(可以說,你需要知道的全部信息)在ASDF Getting Started guide。 ASDF也包含在SBCL中。

    加載源文件時,它會自動編譯(生成.fasl文件(快速加載)),以便下次加載速度更快。

    2

    也許最快速的入門方法之一就是使用Lisp in a Box(或者像LispBox這樣的衍生產品)。這些都是您需要的全套產品。

    你也可以嘗試Lisp Resource Kit,它是一個可啓動的CDROM,帶有Lisp工具和文檔,全部都已經爲你設置。把它放到你的CDROM驅動器並啓動!

    2

    所有這些答案都很好,但隨着Quicklisp的普及,它們已經有點過時了。非常鬆散地說,quicklisp是asdf製作的包管理器。一旦系統上安裝了Quicklisp,您可以使用(ql:quickload "name of lisp library")將該庫加載到您的lisp環境中,包括在需要時下載它以及它的任何依賴關係。例如,要下載,安裝並加載Hunchentoot及其所有依賴項,請使用(ql:quickload "hunchentoot")。在稍後的lisp會話中,再次調用(ql:quickload "hunchentoot")將簡單加載已下載和安裝的版本,使得ql:quickload成爲一種簡單的方法來加載本地或遠程可用的任何庫。要安裝Quicklisp,我可以參考quicklisp.org

    更詳細的解釋

    Lisp語言的作用有點不同於其他語言,當涉及到庫。首先要知道的是,該語言本身幾乎不提供庫功能 - 它具有load(它貫穿並運行文件中的每一行,就像在REPL中輸入它們一樣)和compile-file(它會創建一個「快速加載「文件,其中load s和可以執行得更快)的文件的預編譯版本。使用核心語言提供的內容,爲了加載一個庫,你必須去它的每個文件和它(或者爲了更好的加載速度/性能而使用(load (compile-file "filename")))。這非常乏味,因此創建了各種庫來管理庫的加載,並且目前asdf是王(很多lisp實現實際上捆綁它)。在asdf術語中,庫稱爲「系統」,.asdf文件描述了加載它們所涉及的所有元數據 - 它們所依賴的系統以及以何種順序加載文件(主要是),但它們仍然可能非常複雜。然後,Quicklisp位於asdf之上。基本上,當asdf發現無法找到系統時,Quicklisp會介入並檢查該系統是否可從Quicklisp的一個在線存儲庫中獲得,如果已下載,並且asdf繼續運行。 ql:quickload基本上只是asdf機器上的一個包裝器,用於加載一個系統,使quicklisp能夠根據需要提供幫助。