Macros Racket,使用任意数量的参数执行任意函数
我想定义一个通用函数,大致如下:Macros Racket,使用任意数量的参数执行任意函数,macros,scheme,racket,Macros,Scheme,Racket,我想定义一个通用函数,大致如下: (define (gen-func other-func) (other-func)) 它将执行传递给它的函数。但是,我希望能够使用other func传递参数。 如果我有: (define (add-test a b c d) (+ a b c d)) 及 那我就可以了 (gen-func divide-test 3 4) 及 但它实际上会做我想要的事情(即通过传递任意数量的参数来执行函数)。这是我学习球拍过程的一部分 您要查找的是appl
(define (gen-func other-func)
(other-func))
它将执行传递给它的函数。但是,我希望能够使用other func
传递参数。
如果我有:
(define (add-test a b c d)
(+ a b c d))
及
那我就可以了
(gen-func divide-test 3 4)
及
但它实际上会做我想要的事情(即通过传递任意数量的参数来执行函数)。这是我学习球拍过程的一部分 您要查找的是
apply
和rest参数:
(define (gen-func func . args)
(apply func args))
虚线参数列表
func。args
将在第一个args被收集到列表中后,生成所有args。这样做的原因是(func.args)
与(cons func args)
相同,因此当调用函数时,func
被设置为(car arglist)
,而args
被设置为(cdr arglist)
,这是第一个参数之后的参数列表 您要查找的是apply
和rest参数:
(define (gen-func func . args)
(apply func args))
虚线参数列表
func。args
将在第一个args被收集到列表中后,生成所有args。这样做的原因是(func.args)
与(cons func args)
相同,因此当调用函数时,func
被设置为(car arglist)
,而args
被设置为(cdr arglist)
,这是第一个参数之后的参数列表 非常感谢!顺便问一下,您知道有什么好的库可以找到做有趣事情的示例代码吗?我知道HTDP和文档非常好,但我正在尝试处理宏。查看实际使用示例(宏解决了实际问题)将非常有用helpful@NickO不幸的是,我没有任何关于Racket代码存储库的建议。顺便说一句,说到宏:apply
,这就是你最初问题的答案,是一个普通的函数/过程。@NickO这个星球上的第三方库的源代码:。另外,我想您可以尝试在GitHub上浏览Racket项目:Rosetta代码也可能是一个有用的存储库。各位,好建议。非常感谢你!非常感谢!顺便问一下,您知道有什么好的库可以找到做有趣事情的示例代码吗?我知道HTDP和文档非常好,但我正在尝试处理宏。查看实际使用示例(宏解决了实际问题)将非常有用helpful@NickO不幸的是,我没有任何关于Racket代码存储库的建议。顺便说一句,说到宏:apply
,这就是你最初问题的答案,是一个普通的函数/过程。@NickO这个星球上的第三方库的源代码:。另外,我想您可以尝试在GitHub上浏览Racket项目:Rosetta代码也可能是一个有用的存储库。各位,好建议。非常感谢你!
(define (gen-func func . args)
(apply func args))