Function 如何定义变量函数

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

我正在寻找类似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: #<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)