列出对特定表格的理解

时间:2013-03-23 22:10:31

标签: haskell list-comprehension

如何创建给定

的列表理解
[(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”的地方不是我想要的解决方案。

2 个答案:

答案 0 :(得分:9)

由于在您想要的输出中,第一个组件始终至少与第二个组件一样大,让ij开始,而不是从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]