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