Как использовать пакеты, установленные 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, 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 система, так что вы можете просто загрузить только свой собственный systemи все systems зависит от того, будет ли загружаться автоматически, делая доступными все packageвы хотите использовать.

Другие вопросы по тегам