OCaml中是否存在与Haskell的$运算符等价的运算符?
OCaml 中 Haskell
$ 运算符的等价实现 OCaml 不需要完全依靠括号调整表达式运算优先级,和Haskell$功能等价的运算符有两种常用获取方式:
- 使用标准库内置的
@@运算符
从OCaml 4.01版本开始,标准库就预置了@@作为低优先级右结合的函数应用运算符,语义、优先级、结合性和Haskell的$完全一致,作用就是减少不必要的括号嵌套。
对应提问中的Haskell示例,OCaml中的等价写法如下:
首先定义示例函数:
不使用低优先级应用运算符时,运算逻辑和未加let multiply_by_five x = x * 5$的Haskell代码一致,函数应用优先级高于加法:
使用multiply_by_five 5 + 1 (* 计算结果为26 *)@@时,会先计算运算符右侧的完整表达式,再将结果传入左侧的函数,和使用$的Haskell代码逻辑一致:multiply_by_five @@ 5 + 1 (* 计算结果为30 *) - 自定义
$运算符适配Haskell书写习惯
如果你更熟悉Haskell的$符号,可以直接在代码中加一行定义即可直接使用,不需要额外依赖:
OCaml语法中let ($) f x = f x$本身就被设定为最低优先级、右结合的运算符,上面的定义完成后,$的行为和Haskell中的版本完全一致,可以直接写出和Haskell风格相同的代码:multiply_by_five $ 5 + 1 (* 计算结果同样为30 *)
小提示:对于多层函数嵌套的场景,这类低优先级应用运算符的可读性优势更明显,例如
f (g (h x))可以直接简写为f @@ g @@ h x(或自定义$后写为f $ g $ h x),不需要逐层嵌套括号。
内容的提问来源于stack exchange,提问作者cswannabe
相关产品推荐
相关产品推荐

