Racket - 映射一个接受参数的函数
Racket - Map a function which takes an argument
我想映射一个带参数的函数:
(map best-play (cdr tree) true) ;true is the argument I wanna pass
可以吗?
是的。您可以使用一个名为 curry
(或其同级 curryr
)的函数,它允许 部分应用 ,允许您在不调用函数的情况下传递参数以产生一个新功能。
要理解这一点,请考虑这个例子。
> (define add2 (curry + 2))
> (add2 1)
3
> (add2 2)
4
实际上,在 +
上调用 curry
并传递单个参数会创建一个新函数,它等效于此:
(lambda (x) (+ 2 x))
函数curryr
类似,但它传递的参数从右边开始,而不是从左边开始。这在顺序很重要的函数中很有用。
> (define sub2 (curryr - 2))
> (sub2 4)
2
您可以使用这些函数来执行您想要的映射。如果 true
参数排在第二位,那么你会想要使用 curryr
,像这样:
(map (curryr best-play true) (cdr tree))
我想映射一个带参数的函数:
(map best-play (cdr tree) true) ;true is the argument I wanna pass
可以吗?
是的。您可以使用一个名为 curry
(或其同级 curryr
)的函数,它允许 部分应用 ,允许您在不调用函数的情况下传递参数以产生一个新功能。
要理解这一点,请考虑这个例子。
> (define add2 (curry + 2))
> (add2 1)
3
> (add2 2)
4
实际上,在 +
上调用 curry
并传递单个参数会创建一个新函数,它等效于此:
(lambda (x) (+ 2 x))
函数curryr
类似,但它传递的参数从右边开始,而不是从左边开始。这在顺序很重要的函数中很有用。
> (define sub2 (curryr - 2))
> (sub2 4)
2
您可以使用这些函数来执行您想要的映射。如果 true
参数排在第二位,那么你会想要使用 curryr
,像这样:
(map (curryr best-play true) (cdr tree))