現在、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のバッファにいくつかのプリントを参照してください:
は、このコードを考えてみましょう
負荷1 ASDFシステム: cl-who; "cl-who"をロードする
"parenscript"をロードするには:1 ASDFシステムをロードする: parenscript; "parenscript"をロードする。
"hunchentoot"をロードするには:1 ASDFシステムをロードする: hunchentoot; "hunchentoot"の読み込み..............
つまり、2つのバッファの間に何らかの "会話"が起こっているようです。しかし、(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
はどこにインストールされていますか?私はこれ以上の選択肢がありますか?
あなたはネット上の回答を検索しましたか?このテーマにはたくさんの偉大な資料があります(例えば、 "Practical Common Lisp - 21. The Large:Programming in the Large:Packages and Symbols" Peter Seibel http://www.gigamonkeys.com/book/programming-in-the-large -packages-and-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