SML-使用map解压

SML-使用map解压,sml,smlnj,Sml,Smlnj,给定一个元组列表 [(1,2),(3,4),(5,6)] 我需要把它解压成这样 [[1,3,5],[2,4,6]] 解压的类型必须是('a*'a)list->'a list list 到目前为止,我把它作为解压函数,但我的输入不正确,我不确定如何访问pass-through('a*'a) 这将返回一个列表->一个列表-给您一个元组列表 [(1,2),(3,4),(5,6)] 我们想创建一个函数来重新组织它们 [[1,3,5],[2,4,6]] 我们知道输出应该类似于: [ [tuple

给定一个元组列表

[(1,2),(3,4),(5,6)]
我需要把它解压成这样

 [[1,3,5],[2,4,6]]
解压的类型必须是
('a*'a)list->'a list list

到目前为止,我把它作为解压函数,但我的输入不正确,我不确定如何访问pass-through('a*'a)


这将返回一个列表->一个列表-

给您一个元组列表

[(1,2),(3,4),(5,6)]
我们想创建一个函数来重新组织它们

[[1,3,5],[2,4,6]]
我们知道输出应该类似于:

[ [tuple heads], [tuple tails] ]
我们知道,map为我们提供了一个
列表的输出,这就是我们正在寻找的数据类型

因此,

fun unzip L = [ (map f1 L), (map f2 L) ]
我认为这是一个家庭作业问题,所以我将把它留在这里,让您思考map的适当功能。考虑元组的行为以及如何操作元组中的数据。请记住,
f1
应该与
f2
不同,因为两者操作不同的东西


去死吧

您还可以使用
foldr
按以下方式
解压缩

val unzip = foldr (fn ((x,y), (xs, ys)) = (x::xs, y::ys)) ([], [])

因为你的
L
应该是一个元组列表,
map hd L
没有意义,因为元组没有头。您的
解压
是非递归的,这也是一个问题。我看不出
map
unzip
有多大关系。一个基于模式匹配的简单递归定义应该可以工作。加油!!谢谢你的洞察力!但是像
[(map f L)、(map f L)]
这样的列表将是一个两元素的列表,其第一和第二个组件是相同的,因此不能看起来像
[[1,3,5],[2,4,6]
。您需要在
L
上映射两个不同的函数(如果您想使用map)。是的,第一个元素的函数应该不同于第二个元素。我对代码进行了编辑,使之与想法相似。
val unzip = foldr (fn ((x,y), (xs, ys)) = (x::xs, y::ys)) ([], [])