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];;
工作我不明白爲什麼下面的函數以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];;
你有兩個參數,宣佈它。語法:
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
**(1)**功能'removeFromList'贏得不會編譯,除非它包含在某個包含'removeFromList'的其他定義的上下文中。我相信它的意圖是像這樣定義它'let rec removeFromList ...'。 **(2)**編譯器應該抱怨函數體內缺少'[]'的情況。 –
謝謝,我寫錯了;編輯所以現在應該沒問題 –
* OCaml中的所有*函數總是隻有一個參數。語法'removeFromList et'(解析爲'(removeFromList e)t'因爲函數應用程序是左關聯的)只是簡單地將'removeFromList'應用於'e',然後應用這個結果(這恰好是一個函數)到't'。 – newacct