【问题标题】:how to get the number of arguments supplied to a lisp function如何获取提供给 lisp 函数的参数数量
【发布时间】:2013-02-22 17:41:31
【问题描述】:

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

【问题讨论】:

  • 你知道如何定义一个接受可变数量参数的函数吗?最简单的函数定义没有,所以毫无疑问传递了多少参数。如果你学会了如何定义可变参数函数,就很容易弄清楚如何确定传递了多少参数。

标签: lisp common-lisp sbcl


【解决方案1】:

不清楚你到底在问什么,但在 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 列表,您可以确定一个函数可以接受多少个参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2023-01-29
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多