如何创建给定
的列表理解[(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”的地方不是我想要的解决方案。
答案 0 :(得分:9)
由于在您想要的输出中,第一个组件始终至少与第二个组件一样大,让i
从j
开始,而不是从1开始:
[(i,j) | j <- [1 .. 4], i <- [j .. 4]]
首先使用j <- [1 .. 4]
生成器,j
位于范围内,可用于i
生成器。
答案 1 :(得分:1)
您也可以使用布尔警卫:
[(i,j) | i <- [1..4], j <- [1..4], i >= j]