時々私は次のようなコードを見ます
let (alt : recognizer -> recognizer -> recognizer) =
fun a b p -> union (a p) (b p)
またはのように:
let hd = function
Cons(x,xf) -> x
| Nil -> raise Empty
fun
とfunction
の違いは何ですか?
このセマンティクスはF#と同じです(おそらくF#はOCamlに基づいているため):
function
は、パターンマッチングの使用を許可します(つまり、|
)ですが、その結果、渡すことができる引数は1つだけです。
function p_1 -> exp_1 | … | p_n -> exp_n
と同等です
fun exp -> match exp with p_1 -> exp_1 | … | p_n -> exp_n
fun
はパターンマッチングを許可しませんが、複数の引数を渡すことができます。
fun x y -> x + y
2つの形式のいずれかを使用できる場合は、コンパクトであるため、一般的にfun
が推奨されます。
関数に関するOCamlドキュメント も参照してください。
私の考え方
function patterns
の省略形です
(fun x -> match x with patterns)
ここで、「パターン」は例です。
| Some(x) -> yadda | None -> blah
(そして
fun args -> expr
ラムダを定義する方法です。)
ラスカムは彼の答えで正しいです。
これはそれについて話しているOCamlリストへの投稿です
function
は1つの引数のみを許可しますが、パターンマッチングを許可しますが、fun
は関数を定義するためのより一般的で柔軟な方法です。
関数を使う正当な理由がない限り、私は一般的に楽しみを使います。
これは、投稿したコードで確認できます。ここでは、fun
宣言が3つの引数を取り、function
宣言が入力に対してパターンマッチングを行います。
fun x1 ... xn -> e
の略語です
function x1 -> ... -> function xn -> e