繁体   English   中英

如何将变量传递给函数 lambda 表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM