Question

Possible Duplicate:
Update a list of a list of elements in a single list?

I have a list of values as shown below:

[ ["Off","Off","Off"],
  ["Off","Off","Off"],
  ["Off","Off","Off"] ]

and would like to return the following:

[ ["Off","Off","Off"],
  ["Off",*"On"*,"Off"],
  ["Off","Off","Off"] ]

I have the following function which works just for an individual list by itself:

replaceAll 0 newValue (x:xs) = newValue:xs
replaceAll b newValue (x:xs) = x:replaceAll (b-1) newValue xs

However, I seem to be having trouble working with these multiple lists within a list. How would I devise a function to deal with these two lists (i.e. a list inside another list)?

Still trying to get my head around the whole (x:xs) thing.

Was it helpful?

Solution

Lists aren't the best structure for this sort of thing. But let's work with lists anyway.

We'll tweak your replaceAll so that instead of you providing the replacement value, you provide a function that specifies how to replace the old one with the new one.

replaceAll 0 f (x:xs) = f x:xs -- Here's where we transform x using f
replaceAll b f (x:xs) = x:replaceAll (b-1) f xs

Now we can use replaceAll on itself to perform the replacement we want on a specific row of the matrix:

test = replaceAll 1 (replaceAll 1 (const "On")) yourList

The const "On" function is used because when we get to our specific element we no longer want to transform it, we just want to replace it with "On". Bit for each individual row we do want to transform it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top