Все, что я хотел, это загрузить файл инициализации для swank, который не повлияет на мой lisp, когда он запускается без swank...
Сначала я попробовал #+swank (defun...) в моем файле, который загружается из ccl-init (попробовал это на ccl 1.10 + windows), и вскоре понял, что он получен до загрузки swank (очевидно).
Моя цель — определить простую функцию в :cl-user каждый раз, когда я запускаю swank. Я только что закончил с шикарным add-hook для загрузки моего файла init.lisp, и, поскольку я хочу определить функцию в cl-user, я попробовал это в init.lisp:
(let ((current-package *package*))
(in-package :cl-user)
(defun cd (dir)
(swank:set-default-directory
(parse-namestring dir)))
(in-package current-package))
Теперь я не помню, было ли разрешено использование defun в let, но lisp не жалуется на это, а скорее сообщает мне, что символа cur-pck не существует, и кажется, что когда мы переключаем пакет, cur-pck привязка выходит за рамки. Я думал, что cur-pck — это лексическая привязка, и что она должна быть доступна из лексической области, будучи независимой от пакета, я ошибаюсь?
Почему я переключаю пакеты? Я думаю, что загрузка этого файла из swank в какой-то момент инициализации будет определять вещи в каком-то пакете swank, поэтому я хотел сначала попробовать переключиться на cl-user, определить символ функции и переключиться обратно, чтобы позволить swank сделать это. вещь.
На данный момент, я думаю, мне нужно, чтобы кто-то сказал мне, что я подхожу к проблеме с неправильной точки зрения, и что мне лучше выбрать более простое решение.
Кроме того, из любопытства в случае, если вышеприведенный подход является совершенно неправильным, есть ли способ определить символ в другом пакете внутри функции или замыкания?