【问题标题】:SML pair tuples conversionSML 对元组转换
【发布时间】:2012-03-25 19:06:26
【问题描述】:

我一直在尝试解决这个元组对问题,其中输入是元组列表,输出是列表元组,其中每个元组的第一个元素分组在一起,第二个元素类似(即 [(1 ,2),(3,4),(5,6)] --> ([1,3,5],[2,4,6]))。

我想到了这段代码,但它给了我一个错误:

 fun convert L = foldl (fn ((x,y),(u,v)) => ((u@x),(v@y)) ([],[]) L;

有什么修复建议吗?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    连接(@)接受两个列表,但是x和y是值,所以需要用[]包裹起来,组成一个单元素列表:

    fun convert l=foldl (fn((x,y),(u,v))=>(u@[x],v@[y])) (nil,nil) l
    

    您可以使用 cons 代替串联,尽管返回的元组中的列表是相反的:

    fun convert l=foldl (fn((x,y),(u,v))=>(x::u,y::v)) (nil,nil) l
    

    【讨论】:

      【解决方案2】:

      @ 连接列表(xy 不是列表)。

      试试(u@[x],v@[y])

      但是请注意,追加是线性时间操作,而前置(即 x::u)是恒定的。正如 Alex 指出的那样,这将反向构建您的列表,但您也可以通过反向处理您的输入来解决此问题 - 即使用 foldr 而不是 foldl

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2018-03-19
        • 1970-01-01
        相关资源
        最近更新 更多