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))