Как использовать пакеты, установленные quicklisp?

Я установил пакет CL-PNG с помощью quicklisp.

(ql:quicklisp 'png)

Теперь я хочу определить свой собственный пакет, который зависит от пакета CL-PNG. Вот так:

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

При компиляции я получаю эту ошибку:

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

Кажется, мне нужно позвонить(require :PNG) на REPL перед компиляцией моего пакета.

Что мне нужно сделать, чтобы пакет CL-PNG был доступен для компилятора без вызова вручнуюrequire на REPL?

ОБНОВЛЕНИЕ: я использую SBCL.

Ответы на вопрос(1)

Решение Вопроса

Вы путаете два отдельных понятия:system иpackage, & # XA0;package определяется стандартом Common Lisp и представляет собой набор символов, способ контролировать их видимость и использование.system не определено стандартом, это понятие, введенноеASDF, который представляет собой набор метаданных для управления взаимозависимостями файлов в одном проекте, чтобы иметь возможность правильно скомпилировать и загрузить его.Quicklisp построен на вершинеASDF предоставить способ распространения проектов, описанных в видеASDF systems.

Так что при установке (quickload)system, называетсяPNGэто не означает, что эта система имеет пакет, называемыйPNG, Определяет ли система какие-либо пакеты (обычно она определяет один или даже несколько из них) и как они называются, остается на усмотрение ее автора. Большинство проектов будут иметьpackage.lisp или жеpackages.lisp файлы, где ихpackageс определены.

Но в случаеCL-PNG система, которую вы загружаете, фактически определяет пакетPNGи он должен быть доступен в рабочем процессе после того, как выquickload Это. Но вы должны каким-то образом загружать его каждый раз, когда запускаете систему Lisp.ASDF предоставляет средства для определения зависимости отCL-PNG система, так что вы можете просто загрузить толькоyour own systemи всеsystems зависит от того, будет ли загружаться автоматически, делая доступными всеpackageВы хотите использовать.

 23 июн. 2012 г., 20:58
Посмотрите на файл с.asd расширение. Более подробно синтаксис описан здесь:common-lisp.net/project/asdf/asdf.html#The-defsystem-grammar
 23 июн. 2012 г., 20:47
Можете ли вы подробно рассказать о том, как ASDF обеспечивает это? Какой синтаксис нужен?
 24 июн. 2012 г., 08:20
@Faheem Mitha: быстрый способ начать работу с ASDF см.quickproject, Чтобы сделать новый проект доступным для Quicklisp, поместите новый проект вlocal-projects каталог вашего дистрибутива quicklisp (см.blog.quicklisp.org/2011/11/november-quicklisp-updates.html).
 25 июн. 2012 г., 10:46
@MironBrezuleanu: Спасибо, это выглядит интересно.

Ваш ответ на вопрос