例如,假设我要生成两个值的所有排列,每个值可以是0或1,我将得到:
[11,10,01,00]
请注意,第一个变量的变化最慢,因此它保持固定,而其余的变化。
在三个变量的情况下,我会得到
[111,110,101,100,011,010,001,000]
我看到应该为它定义一个递归定义,但是我脑子里还不清楚它是否可以表达出来。
最佳答案
这与排列无关,而与组合有关,您可以在Haskell中轻松生成它们:
replicateM 3 "01"
= ["000","001","010","011","100","101","110","111"]
如果需要实际整数:
replicateM 3 [0, 1]
= [[0,0,0],[0,0,1],[0,1,0],[0,1,1],
[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
最后,如果各个位置的值不同:
sequence [".x", ".X", "-+"]
= ["..-","..+",".X-",".X+","x.-","x.+","xX-","xX+"]
当然,这也适用于整数:
sequence [[0,1], [0,2], [0,4]]
= [[0,0,0],[0,0,4],[0,2,0],[0,2,4],
[1,0,0],[1,0,4],[1,2,0],[1,2,4]]