use*_*663 2 function common-lisp
假设您想要获取包中每个函数的 lambda 列表。在 SBCL 上,使用iterate你可以做到这一点
(use-package :iterate)
(defun lambda-lists (package)
(iter (for symbol in-package (find-package package))
(collect (sb-introspect:function-type symbol))))
Run Code Online (Sandbox Code Playgroud)
为了更便携,你可以尝试这样的事情
(defun lambda-lists (package)
(iter (for symbol in-package (find-package package))
(collect (function-lambda-expression symbol))))
Run Code Online (Sandbox Code Playgroud)
但这是行不通的,因为它function-lambda-expression需要一个函数,而不是一个符号。类似的东西(function symbol)也不起作用,因为它创建了一个名为 的函数symbol,而不是一个名为 的值的函数symbol。
有没有办法用宏来实现这一点?