簡體   English   中英

Lisp/Scheme/Racket:如何定義帶有省略號的函數

[英]Lisp/Scheme/Racket: How to define a function with ellipsis

我想在 Racket 中定義一個帶有未定義參數數量的函數,所以我使用省略號,但它不起作用:

(define (f x ...) (printf x ...))
(f "~a ~a" "foo" "bar")

錯誤:

Arity mismatch

如何用省略號在 Racket 中定義一個函數?

這有兩半:

  1. 接受任意數量的輸入
  2. 將任意數量的參數傳遞給另一個函數

要接受任意數量的輸入,而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM