如何获取提供给lisp函数的参数数量

Gér*_*ard 1 lisp sbcl common-lisp

如何获得提供给Lisp函数的参数数量(如bash中的变量$ 0)?(我看到了类似的问题,但没有给出答案。)

Jos*_*lor 5

不清楚您要问的是什么,但在Common Lisp中,您可以使用&rest参数将不确定数量的参数收集到列表中。使用length您可以看到提供了多少。例如:

CL-USER> (defun numargs (&rest arguments)
           (length arguments))
NUMARGS
CL-USER> (numargs 1 2 3)
3
CL-USER> (numargs 1 2 3 4 5)
5
CL-USER> (numargs)
0
Run Code Online (Sandbox Code Playgroud)

由于问题带有标记,因此您可能会对SBCL特定的解决方案感兴趣。 sb-introspect:function-lambda-list看起来很相关:

CL-USER> (sb-introspect:function-lambda-list 'cons)
(SB-IMPL::SE1 SB-IMPL::SE2)
CL-USER> (sb-introspect:function-lambda-list 'numargs)
(&REST ARGUMENTS)
Run Code Online (Sandbox Code Playgroud)

如果检查lambda列表,则可以确定一个函数可以接受多少个参数。