kev*_*ler 8 scheme arguments function variadic-functions chicken-scheme
我正在寻找类似于Javascript arguments阵列的东西:
function parent(){
child.apply(this.arguments);
}
Run Code Online (Sandbox Code Playgroud)
我知道变量参数长度的点符号以及scheme的apply函数.
这似乎不起作用,因为点被视为第一个参数:
(define (parent .)
(list .))
(parent 1 3 4 6 7)
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)>
Run Code Online (Sandbox Code Playgroud)
这有效,但并不理想.我想在没有额外语法的情况下调用函数来定义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)
Run Code Online (Sandbox Code Playgroud)
Ósc*_*pez 13
正确的语法是:
(define (parent . args-list)
<do something with args-list>)
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
(parent 1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)
在过程内部,所有参数都将绑定到名为的列表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)
Run Code Online (Sandbox Code Playgroud)
你要:
(define (parent . args)
args) ; args is a list
Run Code Online (Sandbox Code Playgroud)
实际上是的“默认”实现list。
(define (list . x) x)
Run Code Online (Sandbox Code Playgroud)
应用时的错误消息(define (parent . ) ...)似乎是错误的,而且,由于语法无效,因此代码不应首先编译。可能暗示您使用的Chicken Scheme版本存在错误。