Racket,用任意数量的参数执行任意函数

时间:2013-04-04 06:25:02

标签: macros scheme racket

我想按照以下方式定义一般功能:

(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)

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

1 个答案:

答案 0 :(得分:5)

您要找的是apply和其他参数:

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

虚线参数列表func . args会在第一个args被收集到列表args之后产生所有args。这有效的原因是(func . args)(cons func args)相同,因此在调用函数时,func设置为(car arglist)args为设置为(cdr arglist),这是第一个之后的参数列表。