gpt4 book ai didi

common-lisp - 如何导出 Common Lisp 文件中的所有定义符号?

转载 作者:行者123 更新时间:2023-12-04 03:06:20 27 4
gpt4 key购买 nike

我的 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”都没有输出需要的定义符号。我可以以某种方式减去“外部符号”和继承的符号。但这似乎是每个人都需要的东西,应该有一个既定的简单解决方案。我环顾四周,没有找到直接的答案。

如何导出所有定义符号而无需单独手动写出它们?

最佳答案

扫描符号

您可以扫描所有符号并导出具有函数绑定(bind)的所有(这包括宏名称):

(defun export-fbound-symbols (package)
"export symbols with function bindings"
(do-symbols (s package)
(when (fboundp s)
(export s package))))

这通常不是一个好主意:好的软件工程实践是限制公共(public)接口(interface)集。

更具选择性

你可以重新定义defundefmacro这样他们就可以自动导出他们的定义。参见 exporting.lispCLISP .例如,

(defmacro define-function (name lambda-list &body body)
`(progn
(export ',name)
(defun ,name ,lambda-list ,@body)))

请注意,这忽略了 (defun (setf foo) (...) ...) 的可能性。

关于common-lisp - 如何导出 Common Lisp 文件中的所有定义符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com