我想映射一个带参数的函数:
(map best-play (cdr tree) true) ;true is the argument I wanna pass
有可能吗?
答案 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))