2010-03-14 12 views
7

Tôi đã cài đặt ltk vào Ngân hàng thép Lisp chung với cài đặt asdf, nhưng tôi thậm chí không thể bắt đầu sử dụng nó V_V. Đoạn mã dưới đây là ví dụ đơn giản nhất trong tài liệu và được sao chép gần như nguyên văn.Các vấn đề với ltk (lisp phổ biến)


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

Đây là thông báo lỗi tôi nhận được từ 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) 
+0

Trường hợp bị thiếu (trong dòng đầu tiên chỉ là lỗi sao chép và dán? (Tôi giả sử như vậy.) –

+0

Er .. vâng, cảm ơn – Silvanus

Trả lời

5

Bạn phải nhập khẩu những biểu tượng vào gói bạn muốn nó làm việc trong

Gói "người dùng" chung là cl-user và hình ảnh "trinh" sẽ đưa bạn đến đó. Để nhập các ký hiệu (đã xuất) từ một gói khác, hãy phát hành (use-package :another-package). Ví dụ về REPL:

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

Đôi khi, một người muốn sử dụng các biểu tượng không được nhập. Sau đó, bạn có thể đặt tiền tố cho chúng bằng gói, chẳng hạn như bar:foo, trong đó bar là tên gói và foo biểu tượng.

Khi làm việc trên một hệ thống thực, bạn thường sẽ xác định một hoặc nhiều gói cho nó. Này được thực hiện thông qua defpackage, mà bạn có thể cho biết những gì các gói khác để nhập khẩu trực tiếp:

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

Sau đó, bạn cần phải chuyển sang gói:

(in-package #:my-app)

Khi thiết lập một hệ thống phức tạp hơn với một số các tệp phụ thuộc lẫn nhau, một cơ sở định nghĩa hệ thống trở nên đáng giá. Việc sử dụng rộng rãi nhất hiện nay là ASDF, mặc dù một số ít lựa chọn thay thế tồn tại.

+0

IIRC ltk định nghĩa gói ltk-user để chạy trình diễn. – PuercoPop

0

asdf không tải một gói vào gói COMMON-LISP-USER. Kết quả là, VỚI-LTK không được định nghĩa trong gói hiện tại của bạn, vì vậy bạn cần phải làm điều này:.

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

Tôi không khuyên bạn nên làm việc trong gói thư viện – Svante

+0

@Svante: Ah, và bây giờ tôi thấy câu trả lời của bạn :) –