给出一个元组列表,
[(1,2),(3,4),(5,6)]
我需要解压缩它看起来像这样
[[1,3,5],[2,4,6]]
解压缩需要是('a * 'a) list -> 'a list list
类型。
到目前为止,我将此作为我的解压缩功能,但我的输入不正确,而且我不确定如何访问传递(' a *' a)。
val rec last =
fn (h::nil) => h
|(h::list) => last (list)
| (nil) => raise Empty;
fun unzip [] = []
| unzip L = [(map hd L), (map last L)];
这将返回'a list list -> 'a list list
答案 0 :(得分:3)
您获得了元组列表
[(1,2),(3,4),(5,6)]
我们想要创建一个函数来将它们重新组织成
[[1,3,5],[2,4,6]]
我们知道输出应该类似于:
[ [tuple heads], [tuple tails] ]
我们知道 map 为我们提供了list
的输出,这是我们正在寻找的数据类型。
因此,
fun unzip L = [ (map f1 L), (map f2 L) ]
我认为这是一个家庭作业问题,所以我会留在那里让你考虑 map 的适当功能。考虑一下元组的行为以及如何操作元组内的数据。请记住,f1
应该与f2
不同,因为两者操纵不同的事物。
Go Cougs!
答案 1 :(得分:1)
您也可以unzip
使用foldr
通过以下方式:
val unzip = foldr (fn ((x,y), (xs, ys)) = (x::xs, y::ys)) ([], [])