OCaml |>;操作人员

OCaml |>;操作人员,ocaml,Ocaml,有人能解释一下|>操作员的工作吗?此代码取自参考文件: 我可以看到它的作用,但我不知道如何应用|>操作符 就这点而言,我也不知道模块的语法在做什么。关于这一点的解释也很好。操作符表示反向函数应用程序。这听起来很复杂,但它只是意味着您可以将函数(可能还有一些额外的参数)放在您想要应用它的值之后。这使您可以构建类似于Unix管道的东西: # let ( |> ) x f = f x;; val ( |> ) : 'a -> ('a -> 'b) -> 'b = <

有人能解释一下|>操作员的工作吗?此代码取自参考文件:

我可以看到它的作用,但我不知道如何应用|>操作符


就这点而言,我也不知道模块的语法在做什么。关于这一点的解释也很好。

操作符表示反向函数应用程序。这听起来很复杂,但它只是意味着您可以将函数(可能还有一些额外的参数)放在您想要应用它的值之后。这使您可以构建类似于Unix管道的东西:

# let ( |> ) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# 0.0 |> sin |> exp;;
- : float = 1.
#let(|>)xf=fx;;
val(|>):'a->('a->'b)->'b=
#0.0 |>sin |>exp;;
-:float=1。

符号
Module.(expr)
用于临时打开一个表达式的模块。换句话说,您可以在表达式中直接使用来自模块的名称,而不必在模块名称前面加前缀。

|>
操作符看起来像bash中的
|

基本思想是

e |> f = f e
这是一种按执行顺序编写应用程序的方法

例如,您可以使用它(我并不认为您应该这样做)来避免以下情况:

12 |> fun x -> e
而不是

let x = 12 in e

对于
模块。
这件事,就是使用给定模块的特定功能

您以前可能看过
List.map
。 当然,您可以使用
openlist
,然后只使用
map
引用函数。但是如果您以后也
打开数组
map
现在指的是
Array.map
,所以您需要使用
List.map

模块。(e)
相当于
让e中的模块打开。这是一种在范围内介绍事物的速记语法

运算符
|>
在模块
中定义为
let(|>)x f=f x
。(事实上,它被定义为一个外部原语,更容易编译。这在这里并不重要。)正是反向应用程序函数,使得链接连续调用更容易。没有它,你就需要写作

let m = PairsMap.(add (1,0) "world" (add (0,1) "hello" empty))

这需要更多的括号。

谢谢!这是一个非常简单明了的解释。为了说明OP的具体示例,还需要补充一点,|>是左关联的,也被称为“自然应用程序”/“自然合成”。又名从左到右的数学,通常的拉丁方式。在数学记数法中,自然构图写为“f;g”(它是相对类别的构图)
let m = PairsMap.(add (1,0) "world" (add (0,1) "hello" empty))