組合運算子
兩個有用的高階函式是二進位制應用程式 (@@
)和反向應用程式或管道(|>
)運算子。雖然從 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
的結果。