2017-10-06 2 views
-2

현재 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"로드 중 ..............

즉, 두 개의 버퍼 사이에 "말하기"가있는 것 같습니다. 그러나 을 실행하려고 시도하면 CL-USER 패키지가 game 클래스에 대해 알지 못하기 때문에 오류가 발생합니다.

반면에 slime repl sbcl 버퍼에서 (in-package :retro-games)을 실행하면 (make-instance game("Chess"))을 실행할 수 있습니다.

질문은 어떻게 Common Lisp이 패키지로 작업을 구성합니까? 관련 메모에서 버퍼가 slime repl sbcl 인 것과 버퍼가 slime-mode 인 것은 무엇입니까?

패키지는 파이썬의 가상 환경과 비슷합니까? 즉, 내 경우에는 CL-WHO, HUNCHENTOOTPARENSCRIPT이 어디에 설치되어 있습니까? 이것에 대한 선택의 여지가 있습니까?

+0

그물에 대한 답변을 검색 했습니까? 이 주제에 많은 훌륭한 자료가 있습니다 (예 : "Practical Common Lisp - 21. 대형 프로그래밍 : 패키지 및 기호"Peter Seibel http://www.gigamonkeys.com/book/programming-in-the- large -packages-and-symbols.html). – rsm

+0

안녕하세요, python 및 emacs 태그가 필요 없습니다. – Ehvince

+0

Quicklisp은 파이썬의 가상 환경과 다릅니다. Quicklisp은 함께 작업하는 것보다 모든 라이브러리를 함께 만듭니다. [이 토론] (https://github.com/quicklisp/quicklisp-client/issues/148)을 참조하십시오. venv/you/need/venv가 있으면 [Qlot] (https://github.com/fukamachi/qlot)이 있습니다. – Ehvince

답변

3

먼저 (make-instance 'game :name "Chess")을 시도하십시오. Common Lisp는 괄호 사이에 접두사가있는 표기법을 사용합니다. 따라서 foo("bar")과 같은 함수를 호출하려면 (foo "bar")이됩니다. 당신이 Quicklisp를 사용하는 경우, 당신은 quicklisp 설치 한 곳에서 나를 설치 패키지를

(defun new-game (game-name) (make-instance 'game :name game-name))

: 당신이 원하는 경우에, 당신은 같은 함수를 만들 수 있습니다. 홈 폴더에 설치되어있는 패키지는 /home/user/quicklisp/dists/quicklisp/software/이어야합니다.