OCaml标准库中是否有`flip`功能?

tfb*_*boy 11 ocaml

在Haskell中,我们有一个flip函数:flip f x y = f y x它本质上接受一个函数并返回相同的函数,除了交换两个参数.我想知道OCaml中是否有对应物,因为我找不到它并且不想每次都重写它.

干杯,

Jef*_*eld 15

对于通用FP管道的许多这样的函数没有在标准OCaml库中定义.我一直都很想念他们.

但是,现在有很好的OCaml库可以提供大部分或全部这些缺失的功能.在OCaml中有电池项目定义flipBatPervasives的模块.Jane Street Core项目flipFn模块中定义.

  • 核心功能是`Fn.flip` (2认同)

ᆼᆺᆼ*_*ᆼᆺᆼ 7

自 OCaml 4.08 起现已Fun.flip包含在标准库中


sea*_*mcl 5

带有标签的参数在一定程度上减轻了痛苦:

# let f ~x ~y = x - y;; 
val f : x:int -> y:int -> int = <fun>
# f ~y:5;;
- : x:int -> int = <fun>
# f ~x:6;;
- : y:int -> int = <fun>
Run Code Online (Sandbox Code Playgroud)

因此,如果您愿意写下标签(有些人认为这使代码更具可读性),那么您也许能够获得您想要的行为。当然这要看情况。

  • “flip”实际上在部分应用程序的上下文中更有用。一个简单的例子是一个将数字减 2 的函数:`flip (-) 2` (4认同)