如何在haskell中进行枚举

如何在haskell中进行枚举,haskell,Haskell,我有一些字符,例如[“ab”],我只有两个数字,零和一。 我想得到一个这样的答案 [[('a', 1), ('b', 1)], [('a', 0), ('b', 1)], [('a', 1), ('b', 0)], [('a', 0), ('b', 0)]] 我是初学者,有人能帮我吗 非常感谢。最有趣的部分是生成0和1的所有可能序列的列表;一种方法是通过replicItem: > replicateM 2 [1,0] [[1,1],[1,0],[0,1],[0,0]] 您可以从那

我有一些字符,例如[“ab”],我只有两个数字,零和一。 我想得到一个这样的答案

[[('a', 1), ('b', 1)],
 [('a', 0), ('b', 1)],
 [('a', 1), ('b', 0)],
 [('a', 0), ('b', 0)]]
我是初学者,有人能帮我吗


非常感谢。

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

> replicateM 2 [1,0]
[[1,1],[1,0],[0,1],[0,0]]
您可以从那里使用
map
zip

> 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)]]

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

> replicateM 2 [1,0]
[[1,1],[1,0],[0,1],[0,0]]
您可以从那里使用
map
zip

> 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)]]

可能是重复的好吧,我不这么认为,他正在寻找一个特殊的顺序和配对,似乎是这样。@phg这不是真正的家庭作业,作为一个初学者,这对我来说很难。@Laurent没问题。这是对Daniel的回答,因为你实际上并没有像他第一次想的那样搜索笛卡尔积。可能是重复的,我不这么认为,他在寻找一个特殊的顺序和配对,就像它看起来一样。@phg这不是真正的家庭作业,作为一个初学者,这对我来说很难。@Laurent没问题。这是对Daniel的回答,因为你实际上并不是在寻找笛卡尔积,就像他首先想到的那样。谢谢,但我还是不明白,如果是“abcd”呢?它还能用吗?@Laurent您可以使用它按名称或类型查找函数。如果您想匹配不同的字符串,您需要做一些小的更改:
replicItem
2
参数应该是字符串的长度。谢谢大家!我会记住这个网站,它运行得很好,谢谢你的帮助。谢谢,但我还是不明白,如果是“abcd”怎么办?它还能用吗?@Laurent您可以使用它按名称或类型查找函数。如果您想匹配不同的字符串,您需要做一些小的更改:
replicItem
2
参数应该是字符串的长度。谢谢大家!我会记住这个网站,它工作得很好,谢谢你的帮助。