如何在SBCL Lisp中获取Lambda函数的参数列表?
在SBCL中获取Lambda函数的参数列表及相关信息
核心方法:使用SBCL专属自省函数
SBCL提供了一组专属自省函数,可直接提取describe展示的各类信息,无需手动解析输出文本。
获取lambda-list(参数列表)
调用sb-introspect:function-lambda-list函数就能直接拿到目标函数的参数列表:
* (setf f (lambda (a b) (* a b))) #<FUNCTION (LAMBDA (A B)) {535B3C3B}> * (sb-introspect:function-lambda-list f) (A B)
获取其他关联信息
如果需要describe输出里的其他字段,也有对应函数可用:
- 派生类型:
sb-introspect:function-type - 源码形式:
sb-introspect:function-source-form - 文档字符串:
documentation(通用Common Lisp函数,非SBCL专属)
示例代码:
* (sb-introspect:function-type f) (FUNCTION (T T) (VALUES NUMBER &OPTIONAL)) * (sb-introspect:function-source-form f) (LAMBDA (A B) (* A B)) * (documentation f 'function) T
注意事项
- 上述
sb-introspect命名空间下的函数是SBCL专属实现,换用其他Common Lisp环境(如CCL、CLISP)时无法使用。 - 无论lambda函数是否编译,这些函数都能正常返回对应信息。
内容的提问来源于stack exchange,提问作者jshrager
相关产品推荐
相关产品推荐

