如何导出 Common Lisp 文件中的所有定义符号?
How to export all definition symbols in a file in Common Lisp?
我的 lisp 文件包含大约 50 个函数和宏定义。文件的开头是:
(defpackage :utils
(:use :common-lisp))
(in-package :utils)
; ... ~50 defuns/defmacros follow along with some other code
我想导出所有这 50 个定义。但没有其他符号。
将它们全部写在 defpackage 中的 :export 子句中似乎非常乏味。
我尝试通过使用循环的工具在包中列出符号来获取必要的符号。但是 "symbol" 和 "present-symbol" 都没有输出所需的定义符号。我可以以某种方式减去 "external-symbols" 和继承的符号。但这似乎是每个人都需要的东西,应该有一个既定的简单解决方案。我环顾四周,没有找到直接的答案。
如何导出所有定义符号而不必手动单独写出它们?
扫描符号
您可以扫描所有符号并导出 所有具有函数绑定的(这包括宏名称):
(defun export-fbound-symbols (package)
"export symbols with function bindings"
(do-symbols (s package)
(when (fboundp s)
(export s package))))
这通常不是一个好主意:好的软件工程实践是限制 public 接口集。
更有选择性
您可以重新定义 defun
and defmacro
以便他们自动导出他们的定义。
参见 exporting.lisp
in CLISP。例如,
(defmacro define-function (name lambda-list &body body)
`(progn
(export ',name)
(defun ,name ,lambda-list ,@body)))
请注意,这忽略了 (defun (setf foo) (...) ...)
的可能性。
不,这不是每个人都需要的。通常,您会在编写(并且实际需要)它们时导出它们。
我可能会为此使用临时键盘宏。您还可以编写一个小的 Lisp 函数来逐个读取文件并输出相关符号以进行复制粘贴。
我的 lisp 文件包含大约 50 个函数和宏定义。文件的开头是:
(defpackage :utils
(:use :common-lisp))
(in-package :utils)
; ... ~50 defuns/defmacros follow along with some other code
我想导出所有这 50 个定义。但没有其他符号。 将它们全部写在 defpackage 中的 :export 子句中似乎非常乏味。
我尝试通过使用循环的工具在包中列出符号来获取必要的符号。但是 "symbol" 和 "present-symbol" 都没有输出所需的定义符号。我可以以某种方式减去 "external-symbols" 和继承的符号。但这似乎是每个人都需要的东西,应该有一个既定的简单解决方案。我环顾四周,没有找到直接的答案。
如何导出所有定义符号而不必手动单独写出它们?
扫描符号
您可以扫描所有符号并导出 所有具有函数绑定的(这包括宏名称):
(defun export-fbound-symbols (package)
"export symbols with function bindings"
(do-symbols (s package)
(when (fboundp s)
(export s package))))
这通常不是一个好主意:好的软件工程实践是限制 public 接口集。
更有选择性
您可以重新定义 defun
and defmacro
以便他们自动导出他们的定义。
参见 exporting.lisp
in CLISP。例如,
(defmacro define-function (name lambda-list &body body)
`(progn
(export ',name)
(defun ,name ,lambda-list ,@body)))
请注意,这忽略了 (defun (setf foo) (...) ...)
的可能性。
不,这不是每个人都需要的。通常,您会在编写(并且实际需要)它们时导出它们。
我可能会为此使用临时键盘宏。您还可以编写一个小的 Lisp 函数来逐个读取文件并输出相关符号以进行复制粘贴。