首页 > 解决方案 > Ocaml 类型错误:此表达式的类型为 'a * 'b 但表达式应为 'c 列表类型

问题描述

我需要输出一对列表,但我不明白为什么我返回的这对列表类型不正确。

let rec split l = match l with
  | [] -> []
  | [y] -> [y]
  | x :: xs ->
      let rec helper l1 acc = match l1 with
        | [] -> []
        | x :: xs ->
            if ((List.length xs) = ((List.length l) / 2)) then
                (xs, (x :: acc))
            else helper xs (x :: acc)
      in helper l []

标签: ocaml

解决方案


(请花时间在 SO 上复制/粘贴和格式化您的代码,而不是提供指向图像的链接。这样更容易提供帮助,并且在未来更有用。)

辅助函数中的第一种情况match不返回一对。match需要返回相同类型的所有情况(当然)。

请注意,您最外层的案例match也属于不同类型(如果您假设helper返回一对)。


推荐阅读