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