2016-05-31 13 views
3

で動作しますなぜ、以下の機能が、我々は1つのparamでそれを宣言しても、2つの引数で動作しますなぜ私が理解することはできません。つのパラメータOCamlの関数は二つの引数

let rec removeFromList e = function 
    h :: t -> if h=e then h 
      else h :: removeFromList e t 
    | _ -> [];; 

removeFromList 1 [1;2;3];; 
+0

**(1)**関数 'removeFromList'ウォン:

let f = function ... 

だから、あなたの定義は、実際にある

let f x = match x with 

のショートカットとして見ることができます'removeFromList'の他の定義を含む文脈で囲まれていない限り、コンパイルしません。私はこれを 'let rec removeFromList ... 'のように定義しようとしていたと信じています。 **(2)**コンパイラは、関数本体の '[]'の大文字小文字の不一致について文句を言います。 –

+0

ありがとう、私はそれを間違って書いた;これでOKになるはずです –

+0

* OCamlのすべての*関数は常に1つの引数をとります。 'removeFromList et'(関数アプリケーションが左結合であるため、'(removeFromList e)t 'として解析する)構文は単に 'removeFromList'を' e'に適用し、その結果を関数に適用します。 tにする。 – newacct

答えて

4

次の2つのパラメータでそれを宣言しています。構文:

let rec removeFromList e lst = match lst with 
    h :: t -> if h=e then h else h :: removeFromList e 
関連する問題