in reply to Re^2: map in void context
in thread map in void context

But that shows more about you than...

That's part of why I used the word "personally".

In the code at $work right now, I find this (variable names changed to protect the guilty):

map { push @result, $_ if $_ } @{ $obj->method };

Why was this not written as...

push @result, grep { $_ } @{ $obj->method };

In fact, why would I ever have push as the only thing inside a map (a pattern I see repeated throughout code written by this programmer)? Maybe there used to be more code there that made that make sense?

Code should have some semantic meaning beyond the nuts and bolts of what it does. To me, map means "transform one list into another list". It does that using a loop, and so it can be used more generally for looping (like the other constructs you mention), but it has a specialty. I'd say the same thing about grep, which, in void context, is identical to map.

Replies are listed 'Best First'.
Re^4: map in void context
by JavaFan (Canon) on Dec 17, 2008 at 16:29 UTC
    To me, map means "transform one list into another list". It does that using a loop, and so it can be used more generally for looping (like the other constructs you mention), but it has a specialty.
    But that's quite a private meaning you apply to map. Map is a well-known operation in programming, and it means applying a function to the elements of a list. It's the applying of the function that's the crucial part - otherwise, it would have been named differently.
    I'd say the same thing about grep, which, in void context, is identical to map.
    Almost. What differs between map and grep is the context they provide. map provides list context to EXPR/BLOCK, while grep provides scalar context.

      I hate to jump in here, but I have to agree with kyle.

      My understanding on map has always been apply a function to a list to return a new list. In some languages, there is also an apply which is meant to modify the list in place.

      Since most of the places where I've seen map-like constructs (Lisp, Haskell, etc.) are functional languages. The only way they would work is by returning a new list.

      Unfortunately, Perl's map has a behavior that combines map and apply, which confuses the conversation.

      G. Wade