Lisp 一个函数需要多少个参数?

Lisp 一个函数需要多少个参数?,lisp,common-lisp,Lisp,Common Lisp,如何获取函数参数的lambda列表规范,或者至少获取它所需的一些参数 例如: (defun a (a b) ) (get-arg-list #'a) ;-> '(a b) 这是特定于实现的,但是这个CLHS函数可能会让您开始使用-Common Lisp提供了函数function-LAMBDA-EXPRESSION,该函数可能能够恢复源表达式,其中包括LAMBDA列表 LispWorks定义了一个返回arglist的函数function-LAMBDA-LIST 许多其他实现在一些内部包中具

如何获取函数参数的lambda列表规范,或者至少获取它所需的一些参数

例如:

(defun a (a b) )
(get-arg-list #'a) ;-> '(a b)

这是特定于实现的,但是这个CLHS函数可能会让您开始使用-

Common Lisp提供了函数
function-LAMBDA-EXPRESSION
,该函数可能能够恢复源表达式,其中包括LAMBDA列表

LispWorks定义了一个返回arglist的函数
function-LAMBDA-LIST

许多其他实现在一些内部包中具有某种形式的
ARGLIST
函数


许多常见的Lisp用户使用SLIME,这是GNU Emacs编辑器的一个非常聪明的编辑器扩展。它有一个名为SWANK的公共Lisp后端。SWANK源代码为各种常见的Lisp实现提供各种接口,包括获取函数的arglist。

最简单的方法是使用SLIME使用的SWANK库

使用它的方法是加载粘液,这可以通过Quicklisp轻松完成:

(ql:quickload "swank")
然后,可以使用以下函数获取参数列表:

CL-USER> (swank-backend:arglist #'a)
(A B)

顺便说一句,你知道一个库,它会为主要的实现引入一些抽象级别吗?嗨,Necto,请看看Elias和Rainer的其他答案。(顺便说一句,Rainer有一个非常好的页面,不确定它是否仍然在线,显示了Common Lisp的所有优点)一点修正,一个不能快速加载“slime”,因为quicklisp在它的默认repo中没有它。但是我可以(ql:quickload“swank”)。谢谢。这是真的。那是个打字错误。我来修这根柱子。