Ocaml 用地图分割列表

Ocaml 用地图分割列表,ocaml,Ocaml,如何使用map复制列表模块的功能:“List.split” 我已经找到了一种使用fold_的方法,但是我不太明白如何使用map let split l = List.fold_right(fun (x, y) (xs, ys) -> (x :: xs, y :: ys)) l ([], []);; 它可以是简单的事情,比如: let split l = (List.map (fun (a, _) -> a) l, List.map (fun (_, b) -> b)

如何使用map复制列表模块的功能:“List.split”

我已经找到了一种使用fold_的方法,但是我不太明白如何使用map

let split l =
List.fold_right(fun (x, y) (xs, ys) -> (x :: xs, y :: ys)) l ([], []);;

它可以是简单的事情,比如:

let split l =
  (List.map (fun (a, _) -> a) l,
   List.map (fun (_, b) -> b) l)

它可以是简单的事情,比如:

let split l =
  (List.map (fun (a, _) -> a) l,
   List.map (fun (_, b) -> b) l)

你凭什么认为自己能行
map
将返回一个长度与输入相同的列表,其中的元素根据给定的函数进行转换。@glennsl我应该使用“list.map2”吗?我还在学习Ocaml,所以我很迷茫。。。但我知道我应该把这个函数应用到每个元组。。。是吗?
List.map2
也有@glennsl解释的问题。它总是返回一个与您给定的两个列表长度相同的列表。函数应该返回一对列表。最通用的列表处理功能是折叠:
list.fold\u left
list.fold\u right
。正如你所发现的,他们将为你工作。您也可以编写自己的递归函数,但使用折叠可以提供更好的代码(经验丰富的程序员更容易理解)。您为什么认为自己可以
map
将返回一个长度与输入相同的列表,其中的元素根据给定的函数进行转换。@glennsl我应该使用“list.map2”吗?我还在学习Ocaml,所以我很迷茫。。。但我知道我应该把这个函数应用到每个元组。。。是吗?
List.map2
也有@glennsl解释的问题。它总是返回一个与您给定的两个列表长度相同的列表。函数应该返回一对列表。最通用的列表处理功能是折叠:
list.fold\u left
list.fold\u right
。正如你所发现的,他们将为你工作。您也可以编写自己的递归函数,但使用折叠可以提供更好的代码(经验丰富的程序员更容易理解)。