zell_ffhut ?????:
> Last attempt, as its due in a couple of hours
> 
> Here's what i have so far..
> 
>> charToGrid :: Char -> Position -> Grid -> Grid
>> charToGrid c [] (row,col) xs = xs
>> charToGrid c (row,col) xs = (changeValue c (concat xs (row*9 + col)))
> 
> Using changeValue - 
> 
> changeValue x 0 (y:ys) = (x:ys) 
> changeValue x n (y:ys) = y:(changeValue x (n-1) ys)
> 
> Would really appritiate any help
> --
> View this message in context: 
> http://www.nabble.com/Lists-of-Lists-t1245394.html#a3315187
> Sent from the Haskell - Haskell-Cafe forum at Nabble.com.
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 

You can easily do it using updateList as Robert Dockins proposed.

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

changeGrid :: Char -> (Int,Int) -> Grid -> Grid
changeGrid c (row,col) grid = updateList updateRow row grid
    where updateRow l = updateList (const c) col l

Here we replace a row with a new one, using a helper function updateRow which,
given the row, changes one symbol at position col in it. updateList is used
twice here. First it's applied to outer list and then to inner one. It is
possible because of higher-order nature of updateList. It's behavior can be
changed by suppling an appropriate function f as it's first argument.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to