-2
我想將我的第一個兩個元素添加到我的列表中,OCaml匹配錯誤
我在第三行發生錯誤,爲什麼?
let addfirsttwo lst =
match lst with
| List.hd lst + List.hd (List.tl lst)
;;
我想將我的第一個兩個元素添加到我的列表中,OCaml匹配錯誤
我在第三行發生錯誤,爲什麼?
let addfirsttwo lst =
match lst with
| List.hd lst + List.hd (List.tl lst)
;;
您可以混合使用兩種不同的方法從列表中提取信息。一種是使用List.hd
和List.tl
,另一種是模式匹配。
與前者一樣,你差不多完成了。你只需要擺脫模式 匹配的,像這樣:但是
let addfirsttwo lst =
List.hd lst + List.hd (List.tl lst)
我認爲,你的問題涉及到了一些功課,其中List.hd
和List.tl
是被禁止的。而且,無論如何,模式匹配對於瞭解有用。 所以你的代碼的問題是你沒有完成模式匹配。一種圖案匹配子句形式
| <some pattern> -> <some expression>
圖案通常cpontains變量,然後可以在表達式中使用。定義List.hd
的一種方式,例如,是
let hd list = match list with
| head::tail -> head
您的條款是缺少實際的模式和->
。修復您的代碼,至少語法的另一種方式,會一直提供缺少的部分,像這樣:
let addfirsttwo lst =
match lst with
| _ -> List.hd lst + List.hd (List.tl lst)
其中_作爲通配符,將在所有匹配任何值,而不是綁定任何變量。但是,它不會解決假定的功課限制。
值得注意的是,我給出的hd
的模式不符合所有值。它只匹配長度至少爲1的列表。這很好,因爲List.hd
只需要支持非空列表。你的函數只需要支持長度至少爲2的列表。所以對你來說一個好的起點將是一個匹配這樣的列表的模式。
什麼是錯誤?請將其納入問題主體,也許包括標題。 (想想那些試圖解決同樣問題的人) – user5226582