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

时间:2013-02-22 17:41:32

标签: lisp common-lisp sbcl

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

1 个答案:

答案 0 :(得分:4)

目前尚不清楚你究竟在问什么,但在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

由于问题具有标记,您可能对特定于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)

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