如果我有一个元组的输入,其中包含两个相同长度的整数列表,并且我希望我的输出是这两个列表的压缩列表,那么从元组中提取这两个列表后,如何将每个单独的元素压缩为一个列表?例如,如果我的输入是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。不是尾递归。