Function 如何定义变量函数
我正在寻找类似Javascript的Function 如何定义变量函数,function,scheme,arguments,variadic-functions,chicken-scheme,Function,Scheme,Arguments,Variadic Functions,Chicken Scheme,我正在寻找类似Javascript的参数数组: function parent(){ child.apply(this.arguments); } 我知道可变参数长度的点表示法,也知道scheme的apply函数 这似乎不起作用,因为点是第一个参数: (define (parent .) (list .)) (parent 1 3 4 6 7) Error: bad argument count - received 5 but expected 1: #<p
参数
数组:
function parent(){
child.apply(this.arguments);
}
我知道可变参数长度的点表示法,也知道scheme的apply
函数
这似乎不起作用,因为点是第一个参数:
(define (parent .)
(list .))
(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)>
(定义(父项)
(名单)
(家长1 3 4 6 7)
错误:参数计数错误-收到5,但预期为1:#
这是可行的,但并不理想。我想在不使用额外语法来定义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)
(定义(父参数列表)
(应用列表参数列表))
(家长1 3 4 6 7)
错误:参数计数错误-收到5,但预期为1:#
(家长`(1 3 4 6 7))
(1 3 4 6 7)
您需要:
(define (parent . args)
args) ; args is a list
这实际上是list
的“默认”实现
(define (list . x) x)
应用(define(parent.)…)
时的错误消息似乎是错误的,而且,代码本来不应该编译,因为它是无效语法。可能暗示您正在使用的Chicken Scheme版本存在错误。正确的语法是:
(define (parent . args-list)
<do something with args-list>)
在过程内部,所有参数都将绑定到名为argslist
的列表。在上面的代码段中,args list
将以'(1 2 3 4 5)
作为其值。这是一个变量函数如何在Scheme中工作的示例
为完整起见,匿名函数也可以使用相同的机制(请注意,args list
没有用括号括起来):
((lambda参数列表)1 2 3 4 5)
(parent 1 2 3 4 5)
((lambda args-list <do something with args-list>) 1 2 3 4 5)