如何在haskell中进行枚举

时间:2012-05-07 06:22:43

标签: haskell

我有一些字符,例如[“ab”],我只有两个数字,0和1。 我希望得到像

这样的答案
[[('a', 1), ('b', 1)],
 [('a', 0), ('b', 1)],
 [('a', 1), ('b', 0)],
 [('a', 0), ('b', 0)]]

我是初学者,有人能帮帮我吗?

非常感谢。

1 个答案:

答案 0 :(得分:4)

最有趣的部分是生成01的所有可能序列的列表;一种方法是通过replicateM

> replicateM 2 [1,0]
[[1,1],[1,0],[0,1],[0,0]]

您可以使用mapzip

> map (zip "ab") (replicateM 2 [1,0])
[[('a',1),('b',1)],[('a',1),('b',0)],[('a',0),('b',1)],[('a',0),('b',0)]]

为了准确匹配你的答案,你必须做一些额外的改变:

> map (zip "ab" . reverse) (replicateM 2 [1,0])
[[('a',1),('b',1)],[('a',0),('b',1)],[('a',1),('b',0)],[('a',0),('b',0)]]