說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
創建一個函數。我怎樣才能將[]
傳遞給該功能?
說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
創建一個函數。我怎樣才能將[]
傳遞給該功能?
你只需要決定你的函數應該做什麼,當列表不是1個元素。 jambono展示瞭如何在所有這些情況下使功能失效。另一個相當合理的函數總是返回列表的第一個元素,並且只有列表爲空時纔會失敗。這個功能被稱爲List.hd
。
let f = List.hd
或者你也可以自己實現:
let f = function
| [] -> failwith "empty list"
| x :: _ -> x
您必須涵蓋所有可能的情況。除了[x]
,你可以有一個空表,包含多個元素的列表:
let f = function
|[x] -> x
| _ -> failwith "bad entry";;
_
,通配符模式,如果[x]
不匹配匹配的所有可能的值。
(更改'fun'爲'function'獲得良好的語法) –
沒有,這是同爲這裏 – jambono
您是否嘗試過你的編譯碼? –