我想按照以下方式定义一般功能:
(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)
但它实际上会做我想要的(通过传递任意数量的参数来执行函数)。这是我学习球拍的过程的一部分。
答案 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)
,这是第一个之后的参数列表。