2016-05-31 112 views
3

工作我不明白爲什麼下面的函數以2個參數的工程,即使我們有一個PARAM聲明它:爲什麼一個參數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'贏得不會編譯,除非它包含在某個包含'removeFromList'的其他定義的上下文中。我相信它的意圖是像這樣定義它'let rec removeFromList ...'。 **(2)**編譯器應該抱怨函數體內缺少'[]'的情況。 –

+0

謝謝,我寫錯了;編輯所以現在應該沒問題 –

+0

* OCaml中的所有*函數總是隻有一個參數。語法'removeFromList et'(解析爲'(removeFromList e)t'因爲函數應用程序是左關聯的)只是簡單地將'removeFromList'應用於'e',然後應用這個結果(這恰好是一個函數)到't'。 – newacct

回答

4

你有兩個參數,宣佈它。語法:

let f = function ... 

可以被看作是一個快捷方式

let f x = match x with 

所以,你的定義實際上是:

let rec removeFromList e lst = match lst with 
    h :: t -> if h=e then h else h :: removeFromList e