I need to create a function that makes a board of size row and column and then populate that with zeros. mkBoard 2 3 would make [[0,0,0],[0,0,0]]
I don\'t really know w
There is no need to use list comprehension here. We can make use of replicate :: Int -> a -> [a] that will convert an Int
n and an a
to a list that repeats that value n times.
We thus can construct a list of three 0
s with replicate 3 0
. We can then use replicate
a second time to construct a list that contains that list two times for example.
mkBoard :: Num n => Int -> Int -> [[n]]
mkBoard m n = replicate m (replicate n 0)
As @arrowd already mentioned, there is a replicate
function for take n (repeat x)
. You can create one row of your board with replicate n 0
, and then create a board of such rows like mkBoard m n = replicate m (replicate n 0)
.
Also you can create more generic version of this function to fill the field with any value:
genericMkBoard :: a -> Int -> Int -> [[a]]
genericMkBoard x m n = replicate m (replicate n x)
And define your mkBoard
with partial application:
mkBoard = genericMkBoard 0
UPD: Also you can make it like this to be more consistent with replicate
(thanks to @chepner):
replicate2D m n x = replicate m (replicate n x)
mkBoard m n = replicate2D m n 0