不,不是真的在這種情況下(當上的最後一個參數 「多變量」 功能模式匹配)。 function
關鍵字允許您使用一個參數創建函數值,並且當函數應用於某個值時,該值將與模式進行模式匹配。
但是,如果我試圖模式匹配非最後一個參數,我會使用第一個變體。下面是從問題的代碼衍生的幾個例子(我在函數的簽名交換e
和l
):
1)這很容易,我們只是在所有的功能應用的地方複製功能的身體和交換的參數:
let rec f l e = match l with
| [] -> []
| h :: t -> if h=e then t else h :: f t e
2)隨着function
這是一個有點麻煩:
let rec f = function
| [] -> fun e -> []
| h :: t -> fun e -> if h=e then t else h :: f e t
要理解爲什麼第二個變體的作品,記得在OCaml的多參數的函數是唱的序列包裹在裏面互相LE-參數的函數(這就是所謂的討好):
fun p_1 p_2 ... p_n -> body
相同
fun p_1 -> fun p_2 -> ... fun p_n -> body
注意:當然,如果函數的身體並不僅僅在於match
施工,您不能使用function
。
您的兩個示例中都缺少'rec'關鍵字,並且聲明2中缺少名稱'f'。公寓這,都是好的,但我會傾向personnaly寫1)。 – lavi