问题
How do you create a list-based matrix of 1
's with given row and column counts? For example, like:
row=3,column=4 -> [[1,1,1,1],[1,1,1,1],[1,1,1,1]]
回答1:
You can do this with replicate
:
onesMatrix rows cols = replicate rows (replicate cols 1)
回答2:
Here's an alternative method using list comprehension. Let's have a look at the basics:
Prelude> [ 2*x | x <- [1..4] ]
[2,4,6,8]
So that gives you one number for each element in the list [1..4]
. Why not, instead of doubling x
, just have a 1
:
Prelude> [ 1 | x <- [1..4] ]
[1,1,1,1]
And if we want three of them, we can pull the same trick:
Prelude> [ [1|x<-[1..4]] | x<-[1..3] ]
[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
Thus we can define
twoDlist r c = [ [1|x<-[1..c]] | x<-[1..r] ]
which gives
Prelude> twoDlist 3 4
[[1,1,1,1],[1,1,1,1],[1,1,1,1]]
回答3:
import Control.Applicative
import Data.Functor
matrix r c = [1] <* [1..c] <$ [1..r]
来源:https://stackoverflow.com/questions/16366965/creating-2-dimensional-list-matrix