Пример ниже дан в Paul Grahams ANSI Common Lisp в качестве примера выполнения инкапсуляции:
(defpackage "CTR"
(:use "COMMON-LISP")
(:export "COUNTER" "INCREMENT" "CLEAR"))
(in-package ctr)
;function definitions here
Однако в Peter Seibels Practical Common Lisp, ссылка здесь , он говорит:
Поскольку пакеты используются читателем, пакет должен быть определен прежде, чем вы сможете ЗАГРУЗИТЬ или Скомпилировать файл, содержащий IN-PACKAGE выражение переключения на этот пакет. Пакеты также должны быть определены прежде чем другие формы DEFPACKAGE смогут ссылаться на них ... Лучший первый шаг к тому, чтобы пакеты существовали тогда, когда они нужны to заключается в том, чтобы поместить все ваши DEFPACKAGE в файлы отдельно от кода, который должны быть прочитаны в этих пакетах
Поэтому он рекомендует создавать два файла для каждого пакета, один для defpackage и один для кода. Файлы, содержащие defpackages, должны начинаться с (в пакете "COMMON-LISP-USER").
Мне кажется, что размещение defpackage в том же файле перед in-package и кодом - хороший способ убедиться, что пакет определен перед использованием. Таким образом, первый способ - собрать все в один файл - кажется более простым. Есть ли проблемы с использованием этого метода для создания пакетов?