Haskell:列出字符串中的理解唯一字符



以下是我当前的列表理解:[((a,b),a+1) | a <- [1,2], b <- "ab"]

电流输出:[((1,'a'),2),((1,'b'),2),((2,'a'),3),((2,'b'),3)]

预期输出:[((1,'a'),2),((2,'b'),3)]

如何编辑我的列表理解以实现预期输出?

提前感谢!

拥有两个生成器可以生成所有可能的项组合。您需要通过将两个列表压缩在一起生成单个生成器。

[((a,b), a+1) | (a, b) <- zip [1,2] "ab"]

你也可以写

[(t, a+1) | t@(a, _) <- zip [1,2] "ab"]

[(t, fst t + 1) | t <- zip [1,2] "ab"]

因为除了重构刚刚从CCD_ 5解包的元组之外,您不关心CCD_。

GHC还提供了一个扩展ParallelListComp,用于隐式压缩生成器。

> :set -XParallelListComp
> [((a,b), a+1) | a <- [1,2] | b <- "ab"]

请注意使用|而不是,来分隔两个生成器。

最新更新