我目前正試圖理解Common Lisp如何管理它的包和模塊。Common Lisp包和模塊管理
考慮以下代碼:
(in-package :cl-user)
(ql:quickload :cl-who)
(ql:quickload :hunchentoot)
(ql:quickload :parenscript)
(defpackage :retro-games
(:use :cl :cl-who :hunchentoot :parenscript))
(in-package :retro-games)
(defclass game()
((name :initarg :name)
(votes :initform 0)))
當我創建一個泥緩衝區,然後運行它被設置爲煤泥模式的另一個緩衝這段代碼中,我看到一些版畫是*slime-repl sbcl*
第一個緩衝區:
加載1 ASDF系統: cl-who;加載「cl-who」
加載「parenscript」:加載1 ASDF系統: parenscript;加載「parenscript」..
加載「hunchentoot」:加載1 ASDF系統: hunchentoot;正在加載「hunchentoot」..............
也就是說,兩個緩衝區之間似乎有一些「交談」。但是,如果我嘗試運行(make-instance game("Chess"))
,則會出現錯誤,因爲CL-USER
程序包不知道game
類。
另一方面,如果我在slime repl sbcl
緩衝區中運行(in-package :retro-games)
,我可以運行(make-instance game("Chess"))
。
問題是Common Lisp如何用軟件包組織它的工作?在相關說明中,緩衝區是slime repl sbcl
和緩衝區在slime-mode
之間有什麼區別?
這些軟件包是否與Python的虛擬環境類似?也就是說,CL-WHO
,HUNCHENTOOT
和PARENSCRIPT
在我的情況下安裝在哪裏?我有什麼選擇嗎?
您是否在網上搜索了答案?關於這個主題有很多很棒的材料(例如Peter Seibel的「Practical Common Lisp - 21. Large Programming:Packages and Symbols」http://www.gigamonkeys.com/book/programming-in-the-large -packages和 - symbols.html)。 – rsm
嗨,沒有必要的python和emacs標籤。 – Ehvince
Quicklisp與Python的虛擬環境不同。 Quicklisp將所有庫合併在一起,因此它們協同工作。看[這個討論](https://github.com/quicklisp/quicklisp-client/issues/148)。如果你/需要/喜歡venv,有[Qlot](https://github.com/fukamachi/qlot)。 – Ehvince