我正在寻找类似于Javascript的arguments数组的东西:
function parent(){
child.apply(this.arguments);
}我知道用于可变参数长度的点符号和方案的apply函数。
这似乎不起作用,因为点被认为是第一个参数:
(define (parent .)
(list .))
(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)>这是可行的,但并不理想。我想在没有额外语法的情况下调用函数来定义args列表:
(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)发布于 2012-10-18 03:47:53
正确的语法是:
(define (parent . args-list)
<do something with args-list>)像这样使用它:
(parent 1 2 3 4 5)在该过程中,所有参数都将绑定到一个名为args-list的列表。在上面的代码片段中,args-list的值是'(1 2 3 4 5)。这是一个示例,说明了可变函数如何在Scheme中工作。
为了完整起见,匿名函数也可以使用相同的机制(注意,args-list没有用括号括起来):
((lambda args-list <do something with args-list>) 1 2 3 4 5)发布于 2012-10-18 03:47:31
您需要:
(define (parent . args)
args) ; args is a list这实际上是list的“默认”实现。
(define (list . x) x)应用(define (parent . ) ...)时的错误消息似乎是错误的,而且,代码一开始就不应该编译,因为它是无效的语法。可能暗示您正在使用的Chicken版本存在错误。
https://stackoverflow.com/questions/12942127
复制相似问题