這是我目前的串列理解:[((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)]
如何編輯我的串列理解以實作預期的輸出?
提前致謝!
uj5u.com熱心網友回復:
擁有兩個生成器會生成專案的所有可能組合。您需要通過將兩個串列壓縮在一起生成的單個生成器。
[((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"]
因為你不關心b除了重建你剛剛解壓的元組zip。
GHC 還提供了一個擴展 ,ParallelListComp來隱式壓縮生成器。
> :set -XParallelListComp
> [((a,b), a 1) | a <- [1,2] | b <- "ab"]
注意使用|代替,來分隔兩個生成器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517119.html
標籤:哈斯克尔
下一篇:Network.Socket示例中的`withFdSocketsocksetCloseOnExecIfNeeded`呼叫的目的是什么?
