我想用不确定数量的参数在Racket中定义一个函数,所以我使用省略号,但它不起作用:
(define (f x ...) (printf x ...))
(f "~a ~a" "foo" "bar")
错误:
Arity mismatch
如何在球拍中用省略号定义功能?
有两半:
要接受任意数量的输入,请在...
之前放置一个x
,而不是.
之后的x
。这将x
声明为“ rest”参数,并将这些参数收集到x
的列表中。
示例:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
要传递任意数量的参数,可以使用apply
函数,该函数接受列表作为最后一个参数。
示例:
apply
将它们放在一起:
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar