2014-11-23 5 views
6

64 비트 Windows 7
Clozure 커먼 리스프 버전 1.9 WindowsX8632
이맥스 내에서 작동하도록하는 방법 24.3.1
점액 변경 로그 날짜 2014-06커먼 리스프 : (인 - 패키지 ...) 이맥스 점액

(ql:quickload 'qt) 
(in-package "QT") 

프로그램의 나머지 대화 상자를 보여줍니다 : -17

나는 다음과 같이 밖으로 시작 파일 .lisp 예를 들어 있습니다. 명령 줄에서 실행하면 wx86cl -load helloqt.lisp 정상적으로 작동하는 것 같습니다. Emacs Slime (C-x C-k)에서 이것을 실행하면 패키지 "QT"가 없다고 표시됩니다. 그러나 처음에 개별적으로 첫 번째 행 (C-x C-e)을 계산하면 모든 것을 컴파일 할 수 있으며 Windows의 Slime에서 QT 스레드를 실행하려고 시도 할 때의 일반적인 문제를 해결합니다.

첫 번째 행을 먼저 수동으로 평가하지 않고도 emacs에서 파일을 컴파일/실행할 수 있도록하려면 어떻게해야합니까?

또한 Slime 세션에서 (in-package ...)이 현재 패키지를 변경하지 않습니다. 패키지 내용과 상호 작용하려면 수동으로 변경해야합니다.

+0

매우 비슷한 질문이 이미 답변되었습니다. 이것은 마지막 시간이 아닐 것입니다. 나는'eval-when' 태그를 추가했습니다. –

답변

5

파일을 전체적으로 컴파일하면 처음에는 전체적으로 읽습니다. 그 당시 아직 평가 된 것은 없으므로 패키지 QT은 아직 정의되지 않았습니다.

을 사용하여 이전에 무언가를 평가하거나 시스템 정의 기능 (ASDF가 요즘 있음)을 사용하여 시스템을 올바른 순서로로드 할 수 있습니다.

Eval-when :

(eval-when (:compile-toplevel :load-toplevel :execute) 
    (ql:quickload '#:qt)) 

(defpackage #:qt-example 
    (:use #:qt)) 

(in-package #:qt-example) 

;; your code here 

(경우에 당신이 궁금해 : 당신이 일반적으로 라이브러리 패키지로 주위 깨끗이하지만, 자신의, 신선한 패키지를 정의해서는 안

참고 코드를 잡아 , defpackage, defun, defclass 등은 eval-when과 같은 내부 양식으로 확장되도록 특별히 설계된 매크로입니다.

약간의 일회성 스크립트에서는 때로는 괜찮습니다. 특히 즉시 하나 개 이상의 소스 파일을 가지고있는 주목할만한 크기의 시스템의 경우, 항공 자위대를 사용

;;;; qt-example.asd 

(in-package #:cl-user) 

(asdf:defsystem #:qt-experiments 
    :description "Some experiments with QT." 
    :serial t 
    :components ((:file "package") 
       (:file "qt-example")) 
    :depends-on (#:qt)) 

;;;; package.lisp 

(defpackage #:qt-example 
    (:use #:qt)) 

;;;; qt-example.lisp 

(in-package #:qt-example) 

자위대는 대부분의 오픈 소스 커먼 리스프 구현되어 있습니다. ASDF 레지스트리를 설정해야 할 수도 있습니다.

(:source-registry 
    (:tree (:home "devel")) 
    (:tree (:home "src")) 
    :inherit-configuration) 

그런 다음 자위대가 해당 디렉토리 아래에 정의 된 모든 시스템을 찾습니다 : 난 그냥 ~/.config/common-lisp/source-registry.conf에 다음을 넣을 수 있도록 내 모든 지역 프로젝트에 대한 하나 또는 두 개의 기본 디렉토리가 좋아합니다. SLIME에서는 REPL에서 시스템 이름과 함께 ,load-system 또는 ,open-system을 사용하여로드 할 수 있습니다. 그 안에있는 모든 파일을 열고 선택적으로로드하십시오.

파일에서 하나의 최상위 양식 (C-c C-c 사용)을 컴파일 할 때 SLIME은 in-package 양식을 뒤에서보고 어떤 패키지를 사용해야하는지 찾습니다. 일반적으로 상단에 파일 당 하나의 in-package 양식 만 있어야합니다.

일반적으로 유용한 바로 가기는 Lisp 소스 파일에서 C-c ~이며, REPL을 파일의 디렉토리와 유효 패키지를 시점으로 전환합니다.