「fun」キーワードと「function」キーワードの違いは何ですか?
質問
次のようなコードが表示されることがあります
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
ラムダの定義方法です。)
Russ Camの答えは正解です。
これについてOCamlリストに投稿しています
function
は1つの引数のみを許可しますが、パターンマッチは許可しますが、 fun
は関数を定義するより一般的で柔軟な方法です。
関数を使用する正当な理由がない限り、通常はfunを使用します。
これは、 fun
宣言が3つの引数を取り、 function
宣言がその入力でパターンマッチングを行う投稿したコードで確認できます
所属していません StackOverflow