Racket - 映射一个带参数的函数

时间:2015-05-15 16:46:47

标签: scheme racket

我想映射一个带参数的函数:

(map best-play (cdr tree) true) ;true is the argument I wanna pass

有可能吗?

1 个答案:

答案 0 :(得分:2)

是。您可以使用名为curry的函数(或其兄弟curryr),它允许部分应用程序,允许您传入参数而无需调用函数来生成新函数

要理解这一点,请考虑这个例子。

> (define add2 (curry + 2))
> (add2 1)
3
> (add2 2)
4

实际上,在curry上调用+并传递一个参数会创建一个与此等效的新函数:

(lambda (x) (+ 2 x))

函数curryr类似,但它从 right 开始传递参数,而不是左边的参数。这在订单很重要的功能中很有用。

> (define sub2 (curryr - 2))
> (sub2 4)
2

您可以使用这些功能执行所需的映射。如果true参数排在第二位,那么您希望使用curryr,如下所示:

(map (curryr best-play true) (cdr tree))