
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.