[Haskell-cafe] Lists of Lists

Robert Dockins robdockins at fastmail.fm
Wed Mar 8 14:11:09 EST 2006


On Mar 8, 2006, at 1:29 PM, zell_ffhut wrote:
> Im afraid im baffled again!
>
> Im now trying to add a char to a string of strings (eg - ["434233434"
> "444929192" "909313434"]
>
> Im sure i can use my previous function to help me achive this, but  
> i can't
> seem to get it workinging
>
>> charToGrid :: Char -> Position -> Grid -> Grid
>> charToGrid c (row,col) g = concat g (changeValue c(row*9 + col))
>
> Im not sure i should be using concat, as i have to return a grid as  
> it was
> given, just with the added char.

As before, the idea is to create a new list with the changes you  
want, only now you have a list "two levels deep".  So the first thing  
to do is to pick out the sublist (row) you want to "change" and  
create a new changed sublist (row), and then rebuild your grid.  Try  
this, it may get you started:

updateList :: (a -> a) -> Int -> [a] -> [a]
updateList f i l = begin ++ (f x : end)
   where (begin, x : end) = splitAt i l


BTW, lists aren't very good for these kinds of manipulations.  If you  
really need an indexable, mutable data structure, try one of  
Data.Array.*


Rob Dockins

Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
           -- TMBG



More information about the Haskell-Cafe mailing list