2012-06-23 31 views
9

Tôi đã cài đặt gói CL-PNG bằng cách sử dụng quicklisp.Làm thế nào để sử dụng các gói được cài đặt bởi quicklisp?

(ql:quicklisp 'png) 

Bây giờ tôi muốn xác định gói của riêng mình phụ thuộc vào gói CL-PNG. Cũng giống như vậy:

(defpackage :FOO 
    (:use :CL :PNG) 
    (:export :BAR)) 

Khi biên dịch nó tôi nhận được lỗi này:

The name "PNG" does not designate any package. 
    [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR] 

Có vẻ như rằng tôi phải gọi (require :PNG) trên REPL trước khi biên dịch gói của tôi.

Tôi phải làm gì để cung cấp gói CL-PNG cho trình biên dịch mà không cần gọi thủ công require trên REPL?

CẬP NHẬT: Tôi đang sử dụng SBCL.

Trả lời

14

Bạn nhầm lẫn hai khái niệm riêng biệt: a systempackage. A package được định nghĩa theo tiêu chuẩn Common Lisp và đó là một bộ sưu tập các biểu tượng, một cách để kiểm soát khả năng hiển thị và cách sử dụng của chúng. A system không được định nghĩa theo tiêu chuẩn, nó là một khái niệm được giới thiệu bởi ASDF, là tập hợp siêu dữ liệu để quản lý các tệp phụ thuộc trong một dự án duy nhất để có thể biên dịch và tải đúng cách. Quicklisp được xây dựng trên đầu trang của ASDF để cung cấp cách phân phối dự án, được mô tả dưới dạng ASDF system s.

Vì vậy, khi bạn cài đặt (quickload) một system, được gọi là PNG, điều này không có nghĩa là hệ thống này có gói, được gọi là PNG. Hệ thống có định nghĩa bất kỳ gói nào (thường nó định nghĩa một hoặc thậm chí một số gói) và cách chúng được gọi là theo ý của tác giả. Hầu hết các dự án sẽ có các tệp package.lisp hoặc packages.lisp, trong đó các tệp package của chúng được xác định.

Nhưng trong trường hợp hệ thống CL-PNG bạn đang tải, nó thực sự xác định gói PNG và nó sẽ khả dụng trong quy trình đang chạy sau khi bạn quickload nó. Nhưng bạn nên bằng cách nào đó tải nó mỗi khi bạn bắt đầu hệ thống Lisp của bạn. ASDF cung cấp phương tiện để xác định phụ thuộc trên hệ thống CL-PNG, do đó bạn chỉ có thể tải system của riêng bạn và tất cả các system s tùy thuộc vào sẽ được tải tự động, cung cấp tất cả package s bạn muốn sử dụng.

+0

Bạn có thể đi vào chi tiết về cách ASDF cung cấp điều này không? Cú pháp nào là cần thiết? –

+0

Xem tệp có phần mở rộng '.asd'. Cụ thể hơn, cú pháp được mô tả ở đây: http://common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar –

+1

@Faheem Mitha: Để có một cách nhanh chóng để bắt đầu với ASDF, hãy xem [' quickproject'] (http://xach.livejournal.com/269028.html). Để làm cho dự án mới có sẵn cho Quicklisp, hãy đưa dự án mới vào thư mục 'local-projects' của bản phân phối quicklisp của bạn (xem http://blog.quicklisp.org/2011/11/november-quicklisp-updates.html). –

Các vấn đề liên quan