「fun」キーワードと「function」キーワードの違いは何ですか?

StackOverflow https://stackoverflow.com/questions/1604270

  •  05-07-2019
  •  | 
  •  

質問

次のようなコードが表示されることがあります

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リストに投稿しています

http:// caml。 inria.fr/pub/ml-archives/ocaml-beginners/2003/11/b8036b7a0c1d082111d7a83c8f6dbfbb.en.html

function は1つの引数のみを許可しますが、パターンマッチは許可しますが、 fun は関数を定義するより一般的で柔軟な方法です。

関数を使用する正当な理由がない限り、通常はfunを使用します。

これは、 fun 宣言が3つの引数を取り、 function 宣言がその入力でパターンマッチングを行う投稿したコードで確認できます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top