Все еще пытается понять, каковы лучшие практики в отношении макросов. Я пытаюсь написать макрос, который определяет пакеты на лету.
(defmacro def-dynamic-package (name)
`(defpackage ,(intern (string-upcase name) "KEYWORD")
(:use :common-lisp)))
Это прекрасно работает только для таких выражений, как:
(def-dynamic-package "helloworld")
Но с треском проваливается что-то вроде этого:
(defun make-package-from-path (path)
(def-dynamic-package (pathname-name path)))
или
(defun make-package-from-path (path)
(let ((filename (pathname-path)))
(def-dynamic-package filename)))
Я понимаю, как работает большинство основных макросов, но как его реализовать, ускользает от меня.