这是使用列表理解的替代方法。让我们看一下基础知识:
Prelude> [ 2*x | x <- [1..4] ]
[2,4,6,8]
这样就为列表中的每个元素提供了一个数字[1..4]
。为什么不呢,而不是加倍x
,只要有一个1
:
Prelude> [ 1 | x <- [1..4] ]
[1,1,1,1]
如果我们想要其中三个,我们可以使用同样的技巧:
Prelude> [ [1|x<-[1..4]] | x<-[1..3] ]
[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
因此我们可以定义
twoDlist r c = [ [1|x<-[1..c]] | x<-[1..r] ]
这使
Prelude> twoDlist 3 4
[[1,1,1,1],[1,1,1,1],[1,1,1,1]]