OCaml类型错误(折叠)

OCaml类型错误(折叠),ocaml,Ocaml,我在下面的折叠中遇到了一个类型错误,我真的不知道如何解决它。。。有人能告诉我我错过了什么吗 List.fold_left = (fun acc y -> ((fst acc +1), x)::acc) [(0,0)] [1;2;3] 这里的想法是将[(索引,内容)]作为返回值。 对于[1;2;3],它将是[(3,3);(2,2);(1,1);(0,0)] 您的代码错误太多,甚至无法获得类型错误 以下是我看到的前几个错误: 代码中的=是一个比较运算符。最终你会得到一个类型错误。很可能您只想

我在下面的折叠中遇到了一个类型错误,我真的不知道如何解决它。。。有人能告诉我我错过了什么吗

List.fold_left = (fun acc y -> ((fst acc +1), x)::acc) [(0,0)] [1;2;3]
这里的想法是将
[(索引,内容)]
作为返回值。
对于
[1;2;3]
,它将是
[(3,3);(2,2);(1,1);(0,0)]

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

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

  • 代码中的
    =
    是一个比较运算符。最终你会得到一个类型错误。很可能您只想删除
    =
    。这就像写
    sin=x
    而不是只写
    sinx

  • 标识符
    x
    未在代码中的任何位置定义

  • 您的累积值是一个列表,因此无法对其应用
    fst


  • 修复这些错误后,可能会出现类型错误:-)

    您需要向折叠过程传递两位信息:

  • 累积的列表
  • 下一个自由索引
  • 考虑到这一点,对您的功能可能进行的修正如下:

    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)]
    

    你的问题是关于一条错误信息,你甚至没有提供确切的错误信息。我会记住这一点。谢谢,谢谢。看来我还有很长的路要走。嗯。。。x应该是y,并且(错误的拼写…)“=”可以很容易地修复。但是对于(3),我认为list的每个元素都应用于函数,所以我认为可以应用fst(因为list元素是())。是否可以修改列表中()的值?除了pst和fst之外,找不到执行此类操作的模块:(您不能修改OCaml中的列表或对。它们是不可变的。但您当然可以访问所需的值。如果您知道列表从不为空(在示例代码中它从不为空)您可以使用
    List.hd
    获取第一个元素,然后可以对其应用
    fst