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

Nic*_*ckO 1 macros scheme racket

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

(define (gen-func other-func)
   (other-func))
Run Code Online (Sandbox Code Playgroud)

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

(define (add-test a b c d)
    (+ a b c d))
Run Code Online (Sandbox Code Playgroud)

(define (divide-test a b)
    (/ a b))
Run Code Online (Sandbox Code Playgroud)

然后我就能做到

(gen-func divide-test 3 4)
Run Code Online (Sandbox Code Playgroud)

(gen-func add-test 1 2 3 4)
Run Code Online (Sandbox Code Playgroud)

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

Ter*_* D. 5

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

(define (gen-func func . args)
   (apply func args))
Run Code Online (Sandbox Code Playgroud)

点缀的参数列表func . args会在第一个args被收集到列表中之后产生所有args args.其工作原理与之(func . args)相同(cons func args),因此在调用函数时,func将其设置为(car arglist),并将args其设置为(cdr arglist)第一个之后的参数列表.

  • Rosetta Code也可能是一个有用的存储库.http://rosettacode.org/wiki/Racket (2认同)