仍在努力了解有关宏的最佳实践。我正在尝试编写一个动态定义包的宏。
(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)))
我了解大多数基本宏是如何工作的,但是如何实现这个让我无法理解。