[英]Lisp/Scheme/Racket: How to define a function with ellipsis
我想在 Racket 中定義一個帶有未定義參數數量的函數,所以我使用省略號,但它不起作用:
(define (f x ...) (printf x ...))
(f "~a ~a" "foo" "bar")
錯誤:
Arity mismatch
如何用省略號在 Racket 中定義一個函數?
這有兩半:
要接受任意數量的輸入,而不是x
之后的...
,請放置一個.
在x
之前。 這將x
聲明為“其余”參數,並且這些參數將被收集到x
的列表中。
例子:
> (define (f . x) x)
> (f "~a ~a" "foo" "bar")
(list "~a ~a" "foo" "bar")
要傳遞任意數量的參數,您可以使用apply
函數,它接受一個列表作為最后一個參數。
例子:
> (apply printf (list "~a ~a" "foo" "bar"))
foo bar
把這些放在一起:
> (define (f . x) (apply printf x))
> (f "~a ~a" "foo" "bar")
foo bar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.