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

如何获取提供给lisp函数的参数数,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,如何获得提供给Lisp函数的参数数量,如bash中的变量$0?我看到了一个类似的问题,但它没有给出答案。不清楚您到底在问什么,但在公共Lisp中,您可以使用&rest参数将数量不确定的参数收集到一个列表中。使用长度可以看到提供了多少。例如: CL-USER> (defun numargs (&rest arguments) (length arguments)) NUMARGS CL-USER> (numargs 1 2 3) 3 CL-USER>

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

不清楚您到底在问什么,但在公共Lisp中,您可以使用&rest参数将数量不确定的参数收集到一个列表中。使用长度可以看到提供了多少。例如:

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
由于问题有标签,您可能对SBCL特定的解决方案感兴趣。sb内省:函数lambda列表看起来相关:

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

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

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

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
由于问题有标签,您可能对SBCL特定的解决方案感兴趣。sb内省:函数lambda列表看起来相关:

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

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

您知道如何定义一个接受可变数量参数的函数吗?最简单的函数定义没有,因此传递了多少参数是毫无疑问的。如果您学习了如何定义可变参数函数,那么就很容易弄清楚如何确定传递了多少个参数。您知道如何定义一个接受可变数量参数的函数吗?最简单的函数定义没有,因此传递了多少参数是毫无疑问的。如果您学习了如何定义变量参数函数,就很容易弄清楚如何确定传递了多少个参数。