Function Lisp/Scheme/Racket:如何使用省略号定义函数
我想在Racket中定义一个参数数量未定义的函数,所以我使用省略号,但它不起作用:Function Lisp/Scheme/Racket:如何使用省略号定义函数,function,scheme,racket,variadic-functions,arity,Function,Scheme,Racket,Variadic Functions,Arity,我想在Racket中定义一个参数数量未定义的函数,所以我使用省略号,但它不起作用: (define (f x ...) (printf x ...)) (f "~a ~a" "foo" "bar") 错误: Arity mismatch 如何在带有省略号的球拍中定义函数?这有两部分: 接受任意数量的输入 将任意数量的参数传递给另一个函数 要接受任意数量的输入,请在x之前放置一个,而不是之后的..。这将x声明为“rest”参数,参数将被收集到x的列表中 例如: > (define (f
(define (f x ...) (printf x ...))
(f "~a ~a" "foo" "bar")
错误:
Arity mismatch
如何在带有省略号的球拍中定义函数?这有两部分:
x
之前放置一个
,而不是之后的..
。这将x
声明为“rest”参数,参数将被收集到x
的列表中
例如:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
要传递任意数量的参数,可以使用函数,该函数接受列表作为最后一个参数
例如:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
把这些放在一起:
> (define (f . x) (apply printf x))
> (f "~a ~a" "foo" "bar")
foo bar
这有两部分:
接受任意数量的输入
将任意数量的参数传递给另一个函数
要接受任意数量的输入,请在x
之前放置一个
,而不是之后的..
。这将x
声明为“rest”参数,参数将被收集到x
的列表中
例如:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
要传递任意数量的参数,可以使用函数,该函数接受列表作为最后一个参数
例如:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
把这些放在一起:
> (define (f . x) (apply printf x))
> (f "~a ~a" "foo" "bar")
foo bar
提示:这样的函数称为“可变函数”。提示:这样的函数称为“可变函数”。