首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义可变函数

如何定义可变函数
EN

Stack Overflow用户
提问于 2012-10-18 03:42:50
回答 2查看 5.3K关注 0票数 11

我正在寻找类似于Javascript的arguments数组的东西:

代码语言:javascript
复制
function parent(){
  child.apply(this.arguments);
}

我知道用于可变参数长度的点符号和方案的apply函数。

这似乎不起作用,因为点被认为是第一个参数:

代码语言:javascript
复制
(define (parent .) 
          (list .))

(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)>

这是可行的,但并不理想。我想在没有额外语法的情况下调用函数来定义args列表:

代码语言:javascript
复制
(define (parent args-list)
     (apply list args-list))


(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array args-list)>

(parent `(1 3 4 6 7))
(1 3 4 6 7)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-18 03:47:53

正确的语法是:

代码语言:javascript
复制
(define (parent . args-list)
    <do something with args-list>)

像这样使用它:

代码语言:javascript
复制
(parent 1 2 3 4 5)

在该过程中,所有参数都将绑定到一个名为args-list的列表。在上面的代码片段中,args-list的值是'(1 2 3 4 5)。这是一个示例,说明了可变函数如何在Scheme中工作。

为了完整起见,匿名函数也可以使用相同的机制(注意,args-list没有用括号括起来):

代码语言:javascript
复制
((lambda args-list <do something with args-list>) 1 2 3 4 5)
票数 16
EN

Stack Overflow用户

发布于 2012-10-18 03:47:31

您需要:

代码语言:javascript
复制
(define (parent . args) 
   args) ; args is a list

这实际上是list的“默认”实现。

代码语言:javascript
复制
(define (list . x) x)

应用(define (parent . ) ...)时的错误消息似乎是错误的,而且,代码一开始就不应该编译,因为它是无效的语法。可能暗示您正在使用的Chicken版本存在错误。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12942127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档