2

如何1使用给定的行数和列数创建一个基于列表的矩阵?例如,像:

row=3,column=4 -> [[1,1,1,1],[1,1,1,1],[1,1,1,1]]
4

3 回答 3

4

这是使用列表理解的另一种方法。让我们看一下基础知识:

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]]
于 2013-05-03T20:41:47.173 回答
3

你可以这样做replicate

onesMatrix rows cols = replicate rows (replicate cols 1)
于 2013-05-03T20:32:52.463 回答
1
import Control.Applicative
import Data.Functor 

matrix r c = [1] <* [1..c] <$ [1..r]
于 2013-05-04T15:28:37.680 回答