首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SML -使用map解压

SML -使用map解压
EN

Stack Overflow用户
提问于 2018-02-22 06:02:55
回答 2查看 202关注 0票数 3

给定元组列表,

代码语言:javascript
复制
[(1,2),(3,4),(5,6)]

我需要把它解压成这样

代码语言:javascript
复制
 [[1,3,5],[2,4,6]]

解压需要是('a * 'a) list -> 'a list list类型。

到目前为止,我把这个作为我的解压缩函数,但是我的输入是错误的,我不确定如何访问pass through ('a * 'a)。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2018-02-22 13:31:50

您得到了一个元组列表

代码语言:javascript
复制
[(1,2),(3,4),(5,6)]

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

代码语言:javascript
复制
[[1,3,5],[2,4,6]]

我们知道输出应该是这样的:

代码语言:javascript
复制
[ [tuple heads], [tuple tails] ]

我们知道映射给我们的输出是list,这就是我们要寻找的数据类型。

因此,

代码语言:javascript
复制
fun unzip L = [ (map f1 L), (map f2 L) ]

我认识到这是一个家庭作业问题,所以我将把它留在那里,让您考虑适用于map的函数。考虑一下元组的行为,以及如何操作元组中的数据。请记住,f1f2应该是不同的,因为它们处理的是不同的东西。

冲啊Cougs!

票数 4
EN

Stack Overflow用户

发布于 2018-02-26 16:05:33

您还可以通过以下方式使用foldr进行unzip

代码语言:javascript
复制
val unzip = foldr (fn ((x,y), (xs, ys)) = (x::xs, y::ys)) ([], [])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48916252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档