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

OCaml- How to get tail of tuple list?

我是 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),但 tail 似乎只有 (5,6) 而不是 (5,6)(7,8)( 9,10)...如果我是对的。毕竟我得到 "Error: This expression has type 'a * 'b but an expression was expected of type ('a * 'b) list" 所以我认为这一定是正在发生的事情。在模式匹配中,如何使 tail 全部为 (5,6)(7,8)(9,10)?

tail 只是 (5, 6) 是不正确的。 tail 是您预期的列表的完整尾部。

要解决您描述的问题,我认为您只需要在 head1 :: tail.

周围加上括号

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

func head1 :: tail

被解析为像这样被括号括起来:

(func head1) :: tail

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

func (head1 :: tail)

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