[英]How to pass a variable to function-lambda-expression
假设您想获取 package 中每个 function 的 lambda 列表。在 SBCL 上,使用iterate
可以做到这一点
(use-package :iterate)
(defun lambda-lists (package)
(iter (for symbol in-package (find-package package))
(collect (sb-introspect:function-type symbol))))
为了更便携,你可以尝试这样的事情
(defun lambda-lists (package)
(iter (for symbol in-package (find-package package))
(collect (function-lambda-expression symbol))))
但这行不通,因为function-lambda-expression
采用 function,而不是符号。 (function symbol)
之类的东西也不起作用,因为它生成了一个名为symbol
的 function,而不是一个名为 value of symbol
的 function。
有没有办法用宏来实现这一点?
首先,您需要找出哪个符号表示全局 function 而不是宏或特殊形式。 参见: FBOUNDP 、 宏函数、 特殊运算符-P
然后您需要从符号中检索 function:使用SYMBOL-FUNCTION 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.