簡體   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