1

我想按照以下方式定义一个通用函数:

(define (gen-func other-func)
   (other-func))

这将执行传递给它的函数。但是,我希望能够使用other-func. 所以如果我有:

(define (add-test a b c d)
    (+ a b c d))

(define (divide-test a b)
    (/ a b))

那我可以做

(gen-func divide-test 3 4)

(gen-func add-test 1 2 3 4)

但它实际上会做我想要的(通过传递任意数量的参数来执行函数)。这是我学习 Racket 过程的一部分。

4

1 回答 1

5

您正在寻找的是apply和休息的论点:

(define (gen-func func . args)
   (apply func args))

虚线参数列表func . args导致第一个参数之后的所有参数都被收集到列表中args。这样做的原因(func . args)与 相同(cons func args),因此在调用函数时,func设置为(car arglist),并args设置为(cdr arglist)which 是第一个参数之后的参数列表。

于 2013-04-04T07:25:15.683 回答