Home > Software engineering >  How to pass a variable to function-lambda-expression
How to pass a variable to function-lambda-expression

Time:01-23

Let's say you want to get the lambda list of every function in a package. On SBCL, using iterate you could do this

(use-package :iterate)

(defun lambda-lists (package)
  (iter (for symbol in-package (find-package package))
        (collect (sb-introspect:function-type symbol))))

To be more portable you might try something like this

(defun lambda-lists (package)
  (iter (for symbol in-package (find-package package))
        (collect (function-lambda-expression symbol))))

But this won't work since function-lambda-expression takes a function, not a symbol. Something like (function symbol) won't work either since it makes a function called symbol, not a function called the value of symbol.

Is there a way to realize this with macro?

CodePudding user response:

First you need to find out which symbol denotes a global function and not a macro or special form. See: FBOUNDP, MACRO-FUNCTION, SPECIAL-OPERATOR-P

Then you need to retrieve the function from the symbol: use SYMBOL-FUNCTION.

  • Related