组合运算符
两个有用的高阶函数是二进制应用程序 (@@
)和反向应用程序或管道(|>
)运算符。虽然从 4.01 开始它们可以作为基元使用,但在这里定义它们仍然是有益的:
let (|>) x f = f x
let (@@) f x = f x
考虑增加 3 的平方的问题。表达该计算的一种方法是:
(* 1 -- Using parentheses *)
succ (square 3)
(* - : int = 10 *)
(* where `square` is defined as: *)
let square x = x * x
请注意,我们不能简单地做 succ square 3
因为(由于左关联性 )会减少到毫无意义的 (succ square) 3
。使用应用程序(@@
)我们可以表示没有括号:
(* 2 -- Using the application operator *)
succ @@ square 3
(* - : int = 10 *)
注意最后一个要执行的操作(即 succ
)是如何在表达式中首先出现的?该反应用运算符(|>
)允许我们,唉,反转这个:
(* 3 -- Using the reverse-application operator *)
3 |> square |> succ
(* - : int = 10 *)
数字 3 现在通过 square
然后 succ
管道,而不是应用于 square
以产生应用 succ
的结果。