我的lisp文件包含大约50个函数和宏定义。在文件的头部是:
(defpackage :utils
(:use :common-lisp))
(in-package :utils)
; ... ~50 defuns/defmacros follow along with some other code
我想导出所有这50个定义。但没有其他符号。 把它们写进去:defpackage里面的export子句看起来很乏味。
我尝试使用循环工具来获取必要的符号,以便在包中列出符号。但是“符号”和“当前符号”都不输出所需的定义符号。我可以以某种方式减去“外部符号”和继承符号。但这似乎是每个人都需要的东西,应该有一个既定的简单解决方案。我环顾四周,没有找到一个简单的答案。
如何导出所有定义符号而无需单独手动编写?
答案 0 :(得分:3)
您可以扫描所有符号并导出具有功能绑定的所有(包括宏名称):
(defun export-fbound-symbols (package)
"export symbols with function bindings"
(do-symbols (s package)
(when (fboundp s)
(export s package))))
这通常不是一个好主意:良好的软件工程实践是限制公共接口集。
您可以重新定义defun
和defmacro
,以便他们自动导出其定义。
请参阅exporting.lisp
中的CLISP。例如,
(defmacro define-function (name lambda-list &body body)
`(progn
(export ',name)
(defun ,name ,lambda-list ,@body)))
请注意,这忽略了(defun (setf foo) (...) ...)
的可能性。
答案 1 :(得分:1)
不,这不是每个人都需要的。通常,您在编写(实际需要)时会导出它们。
我可能会使用ad hoc键盘宏。您还可以编写一个小的Lisp函数来按表单读取文件格式,并输出相关的符号进行复制粘贴。