例如,假设我要生成两个值的所有排列,每个值可以是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]]

09-29 20:06