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)
我怀疑代码中还有其他问题,但这可能会让你继续。
我是 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)
我怀疑代码中还有其他问题,但这可能会让你继续。