【问题标题】:Common lisp: How many argument can a function take? [duplicate]Common lisp:一个函数可以接受多少个参数? [复制]
【发布时间】:2012-07-30 00:55:11
【问题描述】:

可能重复:
In Lisp, how many inputs can the + function actually have?

以下代码给出“参数过多”错误:

(setf u (loop for i upto 50000 collect 1))
(apply #'+ u)

类似

(apply #'= u)

所以我猜想在用 &rest 编写 defun 时,参数的数量是有上限的。它是什么?我搜索并尝试了here 以及该网站上的各种页面,但我无法弄清楚。

【问题讨论】:

  • 语言规范不是实现。理想情况下会有“没有限制”,但实现(和硬件限制)..
  • 我明白了。所以这取决于实施。我只是想知道语言是否对此设置了下限。我在CLisp和Clozure CL中试过(defun crazy(n) (apply #'+ (loop for i upto n collect 1))),分别是4095和65535。
  • 好吧,您可以期望任何实现至少采用 3 个参数,您现在可能想要该下限的上限,不是吗? :-)
  • 是的,我想要一个最大值的下限。现在我发现答案是由 CALL-ARGUMENTS-LIMIT 给出的

标签: common-lisp


【解决方案1】:

有一个名为 CALL-ARGUMENTS-LIMIT 的常量,它为您提供了可以传递给函数的参数的上限。

但是,在您最初的示例中,您绝对可以使用 REDUCE:

(reduce #'+ u)

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2019-11-17
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2014-05-09
    • 2018-04-20
    相关资源
    最近更新 更多