문제

ASDF- install을 사용하여 LTK에 Steel Bank Common LISP를 설치했지만 V_V를 사용할 수도 없습니다. 아래 코드는 문서에서 가장 간단한 예이며 거의 구두로 복사됩니다.


(asdf:operate 'asdf:load-op :ltk)

(defun hello-1()
  (with-ltk ()
   (let ((b (make-instance 'button
                           :master nil
                           :text "Press Me"
                           :command (lambda ()
                                      (format t "Hello World!~&")))))
     (pack b))))
(hello-1)

이것은 내가 sbcl에서 얻은 오류 메시지입니다.


> ; in: LAMBDA NIL
;     (PACK B)
; 
; caught STYLE-WARNING:
;   undefined function: PACK

;     (WITH-LTK NIL
;      (LET ((B (MAKE-INSTANCE 'BUTTON :MASTER NIL :TEXT "Press Me" :COMMAND #)))
;        (PACK B)))
; 
; caught STYLE-WARNING:
;   undefined function: WITH-LTK
; 
; compilation unit finished
;   Undefined functions:
;     PACK WITH-LTK
;   caught 2 STYLE-WARNING conditions

debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING {1002A57B61}>:
  There is no class named BUTTON.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-PCL::FIND-CLASS-FROM-CELL BUTTON NIL T)
도움이 되었습니까?

해결책

기호를 작업하려는 패키지로 가져와야합니다.

일반적인 "사용자"패키지는입니다 cl-user, 그리고 "처녀"이미지가 당신을 거기에 놓을 것입니다. 다른 패키지에서 (내보낸) 기호를 가져 오려면 문제 (use-package :another-package). 대체의 예 :

(asdf:load-system :ltk)
(use-package :ltk)

때로는 가져 오지 않은 기호를 사용하기를 원합니다. 그런 다음 패키지로 접두사를 할 수 있습니다. bar:foo, 어디 bar 패키지 이름입니다 foo 상징물.

실제 시스템에서 작업 할 때는 일반적으로 하나 이상의 패키지를 정의합니다. 이것은 이루어집니다 defpackage, 직접 가져올 다른 패키지를 알 수 있습니다.

(defpackage #:my-app
  (:use :cl
        :ltk))

그런 다음 해당 패키지로 전환해야합니다.

(in-package #:my-app)

여러 상호 의존적 파일로 더 복잡한 시스템을 설정할 때 시스템 정의 시설이 가치가 있습니다. 현재 가장 널리 사용되는 것은입니다 ASDF, 소수의 대안이 존재하지만.

다른 팁

ASDF는 패키지를 Common-LISP 사용자 패키지에로드하지 않습니다. 결과적으로 LTK를 사용하여 현재 패키지에 정의되지 않으므로 다음을 수행해야합니다.

(asdf:oos 'asdf:load-op :ltk)
(in-package :ltk)
;put your function here
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top