OCaml类型错误(折叠)

时间:2014-09-20 21:26:09

标签: ocaml

我收到以下折叠的类型错误,我真的不确定如何解决它...有谁能告诉我我在这里缺少什么?

List.fold_left = (fun acc y -> ((fst acc +1), x)::acc) [(0,0)] [1;2;3]

这里的想法是将[(index,content)]作为返回值。 对于[1;2;3],它将是[(3,3);(2,2);(1,1);(0,0)]

2 个答案:

答案 0 :(得分:1)

您的代码错误太多,甚至无法获得类型错误!

以下是我看到的前几个错误:

  1. 代码中的=是比较运算符。最终你会得到一个类型错误。很可能你只想放弃=。这就像写sin = x而不仅仅是sin x

  2. 您的代码中未定义标识符x

  3. 您的累计值是一个列表,因此您无法将fst应用于该列表。

  4. 修复这些后,您可能会开始出现类型错误: - )

答案 1 :(得分:0)

您需要将两位信息传递给折叠程序:

  1. 累积清单。
  2. 下一个免费索引。
  3. 考虑到这一点,可能会对您的功能进行更正:

    let decorate lst =
      List.fold_left (fun (acc, index) y ->  ((y, index)::acc, index+1)) ([],1) lst
      |> fst
    
    # decorate [1; 2; 3];;
    - : (int * int) list = [(3, 3); (2, 2); (1, 1)]