在Haskell中将索引追加到列表列表

我正在尝试找到一种在haskell中将[[Int]]转换为[(Int,Int)]对的方法。

例如,[[1,2],[3,4]]应该变成[(1,0),(2,(3,1),(4,1)]

我一直在用zip和list的理解来解决这个问题,但是我还没有找到任何成功。正确的方法是什么?

buguizebinggan 回答:在Haskell中将索引追加到列表列表

此函数将列表中每个元素的坐标值附加到元组的末尾

let zipperfun coord pairlist =  map (\item->(item,coord)) pairlist

我们使用上一个函数创建仿函数,该函数输出一个元组列表列表(每个原始列表一个),其中通过应用zipperfun将每个索引压缩到其对应的元组。

let faux lst = zipWith zipperfun [0..] lst

会产生

[[((1,0),(2,0)],[(3,1),(4,1)]] 然后,我们将所有列表串联在一起。这给出了所需元组的列表。我们将它们放到flattenerfun中。

要创建以下flattenerfun:


let flattenerfun lst = concat (faux lst)
,

zipWith函数是一个很好的起点。因此,您可能会喜欢

Prelude> zipWith (\as i -> as >>= pure . flip (,) i) [[1,2],[3,4]] [0..] >>= id
[(1,0),(2,(3,1),(4,1)]

最后一个>>= id阶段只是连接内部列表。

本文链接:https://www.f2er.com/3157746.html

大家都在问