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 where to start as I am new to Haskell programming I was thinking that the function would be something like this:
mkBoard m n= [m | ???? take n (repeat 0)]
But I am not sure if this would be the correct approach.
Thank you for your help.
There is no need to use list comprehension here. We can make use of
replicate :: Int -> a -> [a]
that will convert anInt
n and ana
to a list that repeats that value n times.We thus can construct a list of three
0
s withreplicate 3 0
. We can then usereplicate
a second time to construct a list that contains that list two times for example.As @arrowd already mentioned, there is a
replicate
function fortake n (repeat x)
. You can create one row of your board withreplicate n 0
, and then create a board of such rows likemkBoard m n = replicate m (replicate n 0)
.Also you can create more generic version of this function to fill the field with any value:
And define your
mkBoard
with partial application:UPD: Also you can make it like this to be more consistent with
replicate
(thanks to @chepner):