Ich versuche gerade zu verstehen, wie Common Lisp seine Pakete und Module verwaltet.Common Lisp Paket- und Modulverwaltung
Betrachten Sie diesen Code:
(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)))
Wenn ich einen Slime Puffer erstellen und dann diesen Code in einem anderen Puffer ausführen, die Slime-Modus eingestellt ist, sehe ich einige Drucke in dem ersten Puffer, der *slime-repl sbcl*
ist:
Load 1 ASDF-System: cl-who; Loading "cl-who"
Um "Parenscript" laden: Load 1 ASDF-System: Parenscript; Laden von "parenscript" ..
So laden Sie "hunchentoot": Laden 1 ASDF-System: hunchentoot; Wird "hunchentoot" geladen ..............
Das heißt, es scheint einige "Gespräche" zwischen den beiden Puffern zu geben. Wenn ich jedoch versuche, (make-instance game("Chess"))
auszuführen, erhalte ich einen Fehler, weil das CL-USER
Paket über die Klasse game
nicht bekannt ist.
Auf der anderen Seite, wenn ich (in-package :retro-games)
im slime repl sbcl
Puffer laufen lasse, kann ich (make-instance game("Chess"))
ausführen.
Die Frage ist, wie organisiert Common Lisp seine Arbeit mit Paketen? In Bezug darauf, was ist der Unterschied zwischen einem Puffer ein slime repl sbcl
und ein Puffer in slime-mode
ist?
Sind die Pakete überhaupt vergleichbar mit Pythons virtuellen Umgebungen? Das heißt, wo sind die CL-WHO
, HUNCHENTOOT
und PARENSCRIPT
in meinem Fall installiert? Habe ich eine Wahl darüber?
Haben Sie im Internet nach der Antwort gesucht? Es gibt eine Menge großartiges Material zu diesem Thema (zB "Praktische gemeinsame Lisp - 21. Programmierung im Großen: Pakete und Symbole" von Peter Seibel http://www.gigamonkeys.com/book/programming-in-the-large -Pakete-und-Symbole.html). – rsm
hi, die Python- und Emacs-Tags waren nicht nötig. – Ehvince
Quicklisp unterscheidet sich von Pythons virtuellen Umgebungen. Quicklisp erstellt alle Bibliotheken zusammen, so dass sie zusammenarbeiten. Siehe [diese Diskussion] (https://github.com/quicklisp/quicklisp-client/issues/148). Wenn Sie/brauchen ein venv, gibt es [Qlot] (https://github.com/fukamachi/qlot). – Ehvince