List OCaml-如何获取元组列表的尾部?

List OCaml-如何获取元组列表的尾部?,list,functional-programming,pattern-matching,tuples,ocaml,List,Functional Programming,Pattern Matching,Tuples,Ocaml,我是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 *) 不是真正的代码,只是为了说明我要解释的内容。当我第一次使用这

我是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 *)

不是真正的代码,只是为了说明我要解释的内容。当我第一次使用这种模式匹配时,头1是(1,2),头2是(3,4),但尾巴似乎只是(5,6)而不是(5,6)(7,8)(9,10)…如果我是对的话。毕竟我得到了“错误:这个表达式的类型是'a*'b,但是一个表达式的类型应该是('a*'b)list”,所以我假设这一定是发生的情况。在模式匹配中,我怎样才能使tail都是(5,6)(7,8)(9,10)?

不是说
tail
只是
(5,6)
<代码>尾部是列表的完整尾部,正如您所期望的那样

要解决您描述的问题,我认为您只需要在
head1::tail
周围加上括号

在OCaml中,函数应用程序具有较高的优先级。所以这个表达式:

func head1 :: tail
将其解析为括号,如下所示:

(func head1) :: tail
但你(我认为)想要的是:


我怀疑代码中还有其他问题,但这可能会让您继续。

。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你说得对,这很有效。谢谢为什么会有不同呢?这是关于运算符优先级的问题。我试着在上面解释,让我知道什么是不清楚的。
func (head1 :: tail)