2010-03-14 20 views
7

Asdf-install ile Steel Bank Common Lisp için ltk yükledim, ancak V_V'yi kullanmaya başlayamıyorum bile. Aşağıdaki kod, belgelerin en basit örneğidir ve neredeyse birebir kopyalanır.ltk (ortak lisp) ile ilgili sorunlar


> ; 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) 
+0

ilk satırda (eksik sadece kopyala-yapıştır hatası mı (Öyle tahmin) –

+0

Er .. evet öyleydi, ben kütüphane paketinde çalışma tavsiye – Silvanus

cevap

5

Jenerik "kullanıcı" paketi cl-user ve bir "bakire" görüntü sizi oraya koyacaktır. (Dışa aktarılan) sembolleri başka bir paketten almak için, (use-package :another-package) numarasını bildirin. Örneğin, bir kişi içe aktarılmayan sembolleri kullanmak ister. Daha sonra, bar:foo gibi, bar paket adı ve foo sembolü olan paketle önek ekleyebilirsiniz.

Gerçek bir sistem üzerinde çalışırken, genellikle bunun için bir veya daha fazla paket tanımlayacaksınız. Bu doğrudan ithal etmek başka hangi paketleri söyleyebilir, hangi defpackage aracılığıyla yapılır:

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

Sonra o pakete geçmek gerekir:

(in-package #:my-app)

birkaçı ile daha karmaşık bir sistem kurulması birbirine bağlı dosyalar, bir sistem tanımlama tesisi değerli hale gelir. Şu anda en yaygın kullanılanı, bir avuç alternatif var olmasına rağmen ASDF'dur.

+0

IIRC ltk, demoları çalıştırmak için ltk kullanıcısını tanımlar. – PuercoPop

0

ASDF ORTAK-LISP-KULLANICI paketinin içine bir paket yüklemez:

(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) 

Bu


ben SBCL aldığım hata mesajıdır. Sonuç olarak, İLE-LTK Mevcut pakette tanımlı değil, bu yüzden bunu yapmak gerekir. Eğer bunu çalışmak istiyorum paketin içine sembolleri ithal etmek zorunda

(asdf:oos 'asdf:load-op :ltk) 
(in-package :ltk) 
;put your function here 
+0

:?.. Ah ve şimdi cevabınızı görüyorum :) – Svante

+0

@Svante etmem sayesinde –