[Haskell-beginners] cleanest way to unwrap a list?
Jack Henahan
jhenahan at uvm.edu
Tue Aug 14 01:06:41 CEST 2012
Equally,
let map' = map . map
map' (+1) . map (++[3]) $ [[1,2],[3,4]]
-- [[2,3,4],[4,5,4]]
And you can really keep stacking those up. I think this approach will be cleaner in the long run.
For instance, let's start naming our parts.
let list = [[1,2],[3,4]]
let map' = map . map
let addOne = map' (+1)
let appendThree = map (++[3])
let reverseInner = map reverse
So, from here we can do the following:
list
-- [[1,2],[3,4]]
-- the first example
addOne list
-- [[2,3],[4,5]]
-- now the second example
addOne . appendThree $ list
-- [[2,3,4],[4,5,4]]
-- now add one to all members of the list, append three to the list, reverse the inner lists,
-- then add one to all members of the new list
addOne . reverseInner . appendThree . addOne $ list
-- [[4,4,3],[4,6,5]]
Now how would you construct that as a list comprehension? With the method I've proposed, you need
only use map to operate on the nested lists themselves and map' to operate on the elements of those
lists.
====
Jack Henahan
jhenahan at uvm.edu
On Aug 13, 2012, at 6:41 PM, Christopher Howard <christopher.howard at frigidcode.com> wrote:
> On 08/12/2012 09:37 PM, Shakthi Kannan wrote:
>> Hi,
>>
>> --- On Mon, Aug 13, 2012 at 10:51 AM, Christopher Howard
>> <christopher.howard at frigidcode.com> wrote:
>> | Say, for example, I have the list
>> | [[1,2],[3,4]] and want to add 1 to each inner element, resulting in
>> | [[2,3],[4,5]].
>> \--
>>
>> Like this?
>>
>> ghci> let xxs = [[1,2], [3,4]]
>>
>> ghci> [ [ x+1 | x <- xs] | xs <- xxs ]
>> [[2,3],[4,5]]
>>
>> SK
>>
>
> Thanks everyone for the responses. I found the list comprehension
> approach satisfactory, as it allows me to cleanly modify each layer of
> the nested array as I unwrap it:
>
> code:
> --------
> b = [[ x+1
> | x <- xs ++ [3] ]
> | xs <- [[1,2],[3,4]] ]
>
> *Main> b
> [[2,3,4],[4,5,4]]
> --------
>
> The only downside is that I have to write the layers out in reverse of
> the way I would normally think of them, but that isn't too big of a
> challenge.
>
> I'm not sure how that would be done with map in a way that would be neat
> and readable and wouldn't require declaring extra identifiers. I can't
> give a fair evaluation of the Lens approach because I don't understand
> enough of the theory yet.
>
> --
> frigidcode.com
> indicium.us
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
More information about the Beginners
mailing list