如何使用 OCaml 将两个列表中的每个单独元素压缩到一个列表中

3 ocaml list pairing

如果我有一个元组的输入,其中包含两个相同长度的整数列表,并且我希望我的输出是这两个列表的压缩列表,那么从元组中提取这两个列表后,如何将每个单独的元素压缩为一个列表?例如,如果我的输入是twolists= ([1;2;3], [4;5;6]),那么我希望我的输出是[(1,4); (2,5); (3,6)]。如何压缩每个元素并将其添加到我的输出中?函数名称和类型如下:

let rec pairlists twolists = ...

val pairlists : 'a list * 'b list -> ('a * 'b) list = fun
Run Code Online (Sandbox Code Playgroud)

到目前为止我有:

let rec pairlists twolists = 
  let (l1, l2) = twolists in
  let rec zip (l1,l2) =
    match l1 with 
    |[] -> l2
    |x :: xs -> x :: zip(l2, xs) in
  twolists ;;
Run Code Online (Sandbox Code Playgroud)

但这显然不是我想要的。

小智 8

您在寻找List.combine吗?

val 组合:'a 列表 -> 'b 列表 -> ('a * 'b) 列表

将一对列表转换为对列表:combine [a1; ...; 一个] [b1; ...; bn] 是 [(a1,b1); ...; (an,bn)]。

如果两个列表的长度不同,则引发 Invalid_argument。不是尾递归。