首页 文章

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

提问于
浏览
1

我是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 回答

  • 3

    tail 只是 (5, 6) 并不是真的 . tail 是您所期望的列表的完整尾部 .

    为了解决你所描述的问题,我认为你需要围绕 head1 :: tail 括号 .

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

    func head1 :: tail
    

    被解析,好像它是这样的括号:

    (func head1) :: tail
    

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

    func (head1 :: tail)
    

    我怀疑代码中还有其他问题,但这可能会让你感到高兴 .

相关问题