我是OCaml的初学者,所以我不确定这是不是一个正确的问题 . 无论如何,让我说我有一个元组列表[(1,2);(3,4);(5,6);(7,8);(9,10)] . 我是函数中的模式匹配所以
let rec func list = match list with
|(* base case here *)
|head1::head2::tail -> func head1::tail;; (* error here *)
不是真正的代码,只是为了说明我要解释的内容 . 当我使用第一次匹配的模式时,head1是(1,2),head2是(3,4),但尾部似乎只是(5,6)而不是(5,6)(7,8)( 9,10)...如果我是对的 . 毕竟我得到了“错误:这个表达式有'a *'b类型,但是表达式是期望的类型('a *'b)列表”所以我认为必须是正在发生的事情 . 在模式匹配中如何使尾部成为(5,6)(7,8)(9,10)的全部?
1 回答
tail
只是(5, 6)
并不是真的 .tail
是您所期望的列表的完整尾部 .为了解决你所描述的问题,我认为你需要围绕
head1 :: tail
括号 .在OCaml中,函数应用程序具有高优先级 . 所以这个表达式:
被解析,好像它是这样的括号:
但你想要的(我认为)是:
我怀疑代码中还有其他问题,但这可能会让你感到高兴 .