Haskell列表生成器2参数[重复]

kiz8lqtg  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(149)

此问题在此处已有答案

Haskell, 2 list to list of tuples pointwise(3个答案)
List comprehension vs zipWith in Haskell(5个答案)
21天前关闭。

[(x, y) | x <- ['a'..'z'], y <- ['A'..'Z']]

有没有办法得到这样的结果:

[(a,A), (b, B), ..]

而不是这个:

[(a, A), (a, B), ..]

而不使用任何加号函数?

xqkwcwgp

xqkwcwgp1#

正确的方法是压缩这两个列表:zip ['a'..'z'] ['A'..'Z'] .
如果使用ZipList s,则可以使用应用型风格实现相同的效果:

import Control.Applicative (ZipList)

getZipList $ (,) <$> (ZipList ['a'..'z']) <*>  (ZipList ['A'..'Z'])
[('a','A'),('b','B'), {- the list you wanted -}]

(Look有关详细信息,请访问LYAH。)
将以上内容与以下内容进行比较

(,) <$> ['a'..'z'] <*> ['A'..'Z']

这相当于您的列表理解。
我们基本上将相同的模式应用于“zip列表”,它与“普通列表”类似,但具有不同的修饰。
不幸的是(我并不知道),列表理解确实是一种“普通列表”理解,所以它并没有降低上述应用型风格的糖含量,这意味着

[(x, y) | x <- (ZipList ['a'..'z']), y <- (ZipList ['A'..'Z'])]

不是有效Haskell

相关问题