OCaml匹配错误
问题描述:
我想将我的第一个两个元素添加到我的列表中,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