Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros Racket,使用任意数量的参数执行任意函数_Macros_Scheme_Racket - Fatal编程技术网

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