首页 文章

SML - 使用map解压缩

提问于
浏览
2

给出一个元组列表,

[(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

2 回答

  • 1

    你得到了一个元组列表

    [(1,2),(3,4),(5,6)]
    

    我们想要创建一个函数来重新组织它们

    [[1,3,5],[2,4,6]]
    

    We know 输出应该类似于:

    [ [tuple heads], [tuple tails] ]
    

    并且 we know map为我们提供了 list 的输出,这是我们正在寻找的数据类型 .

    从而,

    fun unzip L = [ (map f1 L), (map f2 L) ]
    

    我认为这是一个家庭作业问题,所以我会留在那里让你考虑适当的 Map 功能 . 考虑一下元组的行为以及如何操作元组内的数据 . 请记住, f1 应该与 f2 不同,因为两者操纵不同的东西 .

    去Cougs!

  • 3

    您也可以通过以下方式使用 foldr unzip

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

相关问题