2013-08-31 20 views
2

說OCaml中我有以下功能:如何讓`fun [x] - > x`詳盡無遺?

let f = fun [x] -> x 

我收到以下警告結果:

this pattern-matching is not exhaustive. 
Here is an example of a value that is not matched: 
[] 

我的目標是從'a list -> 'a創建一個函數。我怎樣才能將[]傳遞給該功能?

回答

5

你只需要決定你的函數應該做什麼,當列表不是1個元素。 jambono展示瞭如何在所有這些情況下使功能失效。另一個相當合理的函數總是返回列表的第一個元素,並且只有列表爲空時纔會失敗。這個功能被稱爲List.hd

let f = List.hd 

或者你也可以自己實現:

let f = function 
| [] -> failwith "empty list" 
| x :: _ -> x 
1

您必須涵蓋所有可能的情況。除了[x],你可以有一個空表,包含多個元素的列表:

let f = function 
    |[x] -> x 
    | _ -> failwith "bad entry";; 

_,通配符模式,如果[x]不匹配匹配的所有可能的值。

+0

(更改'fun'爲'function'獲得良好的語法) –

+0

沒有,這是同爲這裏 – jambono

+0

您是否嘗試過你的編譯碼? –

相關問題