Function Lisp/Scheme/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

我想在Racket中定义一个参数数量未定义的函数,所以我使用省略号,但它不起作用:

(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
    

    提示:这样的函数称为“可变函数”。提示:这样的函数称为“可变函数”。