Я использую delete-package
как простой способ удалить множество старых (указанных пользователем) имен переменных перед загрузкой проекта обратно после определенных правок в файлах пакета. (В противном случае новые значения могут быть заменены старыми значениями для тех имен переменных, которые определены конечным пользователем.) Но SBCL жалуется, когда я пытаюсь перезагрузить после удаления.
После однократной загрузки файла init.lisp
, который настраивает Quicklisp, ASDF и устанавливает некоторые библиотеки Quicklisp, я затем загружаю проект с помощью (progn (asdf:load-system “my-project”) (in-package :my-package))
, где файл определения проекта my-project.asd
содержит
(when (find-package :my-package)
(delete-package :my-package))
(defpackage :my-package
(:use :cl))
(asdf:defsystem "my-project"
…)
Это все отлично работает при первой загрузке, но спотыкается при второй загрузке проекта, т.к.
*PACKAGE* can't be a deleted package:
It has been reset to #<PACKAGE "COMMON-LISP-USER">.
Откуда ошибка? Можно ли это исправить, сохранив прежний функционал?