0

如何创建这样的列表理解

[(i,j) | i <- [1..4], j <- [1..4]] yields the following:

[(1,1),(2,1),(3,1),(4,1),(2,2),(3,2),(4,2),(3,3),(4,3),(4,4)]

即列出关于 j 的所有组合?

PS。交换“i”和“j”的位置不是我正在寻找的解决方案。

4

2 回答 2

9

由于在您想要的输出中,第一个分量总是至少与第二个分量一样大,所以i从 开始j,而不是从 1 开始:

[(i,j) | j <- [1 .. 4], i <- [j .. 4]]

首先使用j <- [1 .. 4]生成器,j它在范围内并且可以用于i生成器。

于 2013-03-23T22:12:41.387 回答
1

您还可以使用布尔值守卫:

[(i,j) | i <- [1..4], j <- [1..4], i >= j]
于 2013-03-23T23:25:16.857 回答