2

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]]
comingstorm
  • 25,557
  • 3
  • 43
  • 67
ProgrammerPotato
  • 505
  • 1
  • 4
  • 11

3 Answers3

4

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]]
AndrewC
  • 32,300
  • 7
  • 79
  • 115
3

You can do this with replicate:

onesMatrix rows cols = replicate rows (replicate cols 1)
comingstorm
  • 25,557
  • 3
  • 43
  • 67
1
import Control.Applicative
import Data.Functor 

matrix r c = [1] <* [1..c] <$ [1..r]
Landei
  • 54,104
  • 13
  • 100
  • 195