1

How can I get the number of arguments supplied to a Lisp function like in bash with the variable $0? (I saw a similar question but it does not give the answer.)

4

1 回答 1

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

由于该问题具有标记,因此您可能对特定于 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 列表,您可以确定一个函数可以接受多少个参数。

于 2013-06-23T22:23:32.180 回答