나는 Debian squeeze에서 cl-swank/slime 1 : 20120420-2 (Debian 버전 번호)와 함께 SBCL 1.0.56을 사용하고 있습니다. 이것들은 모두 불안정한 현재 버전입니다.Debian에서 SLIME을 사용하여 Common Lisp에 외부 패키지로드
제 3 자 CL 패키지를로드하는 데 문제가 있습니다. 데비안에서 CL을 사용하는 데 대한 설명서 (실제로 Linux의 CL 사용 설명서)는 스케치 적이거나 모순되거나 으로 구식이므로 알고있는 내용을 요약 해 보겠습니다. 여기에 내가있는 곳이있다.
Debian은 /usr/share/common-lisp/source
에 바이너리 패키지 (예 : cl-split-sequence)를 설치합니다. split-sequence의 경우, 이것은 /usr/share/common-lisp/source/cl-split-sequence
입니다. 입력, 점액을 실행할 때 나는 그것을 이해, 버전 및 종속성에 대한 CL 구현 에 지침을 제공,
.ASD 파일 (여기 /usr/share/common-lisp/source/cl-split-sequence/split-sequence.asd
), 는, 지금과 같은
;;; -*- Lisp -*- mode
(defpackage #:split-sequence-system (:use #:cl #:asdf))
(in-package :split-sequence-system)
(defsystem :split-sequence
:version "20011114.1"
:components ((:file "split-sequence")))
보인다 문제없이 REPL 작품에서 다음 두 줄
(require :split-sequence)
(split-sequence:SPLIT-SEQUENCE #\, "foo,bar")
(require :split-sequence)
를 원용 (내 생각)을 ASDF의 내장 사본 (SBCL 내부)은 아마도 split-sequence.asd
입니다. 이 은 아마도 SBCL에만 해당됩니다 (Common Lisp in Debian Manual Chapter 3 -Libraries 참조). 처럼 유용하고 상세한 페이지는 CLC (Common Lisp 컨트롤러)를 자주 참조하지만 데비안이이 문제로부터 멀어지고있는 것 같습니다. 완전히 이해하지 못하는 Redesign of Common Lisp Controller, 을 참조하십시오. 어쨌든, 문서화 된 CLC 사용 명령 중 아무 것도 나에게 적합하지 않습니다. 그러나 CLC는 Debian의 에서 계속 사용할 수 있습니다. 는
~/.cache/common-lisp/sbcl-1.0.56.0.debian-linux-x86/usr/share/common-lisp/source/cl-split-sequence/split-sequence.fasl
에 배치 처음 (require :split-sequence)
그것이 , 컴파일하고, 호출 The Clc-users Archives
를 참조하십시오 (내 시스템에, 아마도 데비안 별) 결과 fasl
입니다 - 또한, 메일 링리스트가 죽었다는 사용자가
e 파일은 원래 소스의 위치를 미러링하는 파일 시스템의 캐시 아래에 배치됩니다. 분명한 질문은 시스템에서 패키지를 찾을 위치를 어떻게 알 수 있습니까? 이것은 내가 아닌 한 가지입니다. 이 검색 경로는 자위대 데비안 패키지의 일부인 /etc/common-lisp/source-registry.conf.d
에 제공해야하지만, 가장 가까운 것은 어쩌면 어딘가에 하드 연결되어 단지
(:directory #p"/usr/share/common-lisp/systems/")
입니다 01-common-lisp-controller.conf
이지만, 모양 나는 알고 싶다.
은 어쨌든,이 ASDF 파일이 캐시에 한 번, 그것은 , 다시 컴파일되지 않고 하나 다시 require
을하지 않는 한 점액이 시작 후 REPL은 표시되지 않습니다.내가 선 파일에서
(require :split-sequence)
(split-sequence:SPLIT-SEQUENCE #\, "foo,bar")
,
seq.lisp
말, 사람 및 참조 Ck를 가진 REPL에로드를 넣으면
지금, 나는 는
The name "SPLIT-SEQUENCE" does not designate any package.
[Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]
로 시작, 오류 및 역 추적을 얻을
그래서 패키지가 올바르게로드되지 않았다고 결론을 내립니다. 나는
(asdf:oos 'asdf:load-op :split-sequence)
및
(asdf:load-system :split-sequence)
하지만 주사위처럼 변화를 시도했다. 이상하게, 우리는 단지 파일의 라인
(require :split-sequence)
이 있다고 가정 - 명확성이 require.lisp
를 호출합니다. 그런 다음 오류를 제공하지 않습니다 require.lisp
을로드 한 다음 REPL에서
(split-sequence:SPLIT-SEQUENCE #\, "foo,bar")
작동 입력! 그러나 require.lisp
을로드하지 않고 앞의 행 을 입력하면 REPL에서 작동하지 않습니다.
따라서 결론적으로 스크립트에서 어떻게 패키지를로드 할 수 있습니까? 또한 위에 언급 된 문제에 대해 에 대해 ASDF가 /usr/share/common-lisp/source/
위치를 찾는 방법에 관심이 있지만 더 많은 문제가있는 에 관심이 있습니다.
덕분에 Rainer는 매우 명확한 설명입니다. 내가 인용 한 스크립트가 실제로 얼마나 필요합니까? '# + : sbcl'은 무엇을할까요? –
내 자신의 질문에 대답 - 분명히별로. (split-sequence : SPLIT-SEQUENCE # \, "foo, bar"))'(require : split-sequence)) 공장. –