【发布时间】:2013-02-22 17:41:31
【问题描述】:
如何获得提供给 Lisp 函数的参数数量,比如在 bash 中使用变量 $0? (我看到了一个类似的问题,但它没有给出答案。)
【问题讨论】:
-
你知道如何定义一个接受可变数量参数的函数吗?最简单的函数定义没有,所以毫无疑问传递了多少参数。如果你学会了如何定义可变参数函数,就很容易弄清楚如何确定传递了多少参数。
标签: lisp common-lisp sbcl
如何获得提供给 Lisp 函数的参数数量,比如在 bash 中使用变量 $0? (我看到了一个类似的问题,但它没有给出答案。)
【问题讨论】:
标签: lisp common-lisp sbcl
不清楚你到底在问什么,但在 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 标签,您可能对特定于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 列表,您可以确定一个函数可以接受多少个参数。
【讨论】: