[erlang-questions] List comprehension question

José Valim <>
Thu Jan 16 17:51:16 CET 2014


It is definitely a public feature of list comprehensions. Maybe a pull
request should be sent to the list comprehensions
page<http://www.erlang.org/doc/programming_examples/list_comprehensions.html>
updating
the docs and adding nice examples? :)



*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Lead Developer


On Thu, Jan 16, 2014 at 5:39 PM, Rich Neswold <>wrote:

> Hello,
>
> This morning I became aware of a (powerful) feature of list
> comprehensions. Take the following example:
>
>     [ X + Y || {X, Y} <- L].
>
> If we set L to [{1,2}, ok, {1,3}], we get the result [3,4] instead of
> a pattern match exception (as I was expecting.) This means that list
> comprehensions give you a "free" lists:filter/2 in the generator
> expressions!
>
> I've looked through the OTP documentation, quite a few Stack Overflow
> questions, and several list comprehension tutorials and none of them
> explicitly state that generator expressions filter elements that don't
> match their pattern. The web pages emphasize generators and guards are
> like combinations of lists:map and lists:filter, which isn't exactly
> correct. For instance, the above example is not the same as:
>
>     lists:map(fun ({X, Y}) -> X + Y end, L).
>
> but is more equivalent to:
>
>     lists:foldr(fun ({X, Y}, Acc) -> [X + Y | Acc];
>                     (_, Acc) -> Acc
>                 end, [], L).
>
> Is this an expected, but undocumented, feature of list comprehensions?
> Or am I in "undefined behavior" territory?
>
> --
> Rich
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140116/32c85ab1/attachment.html>


More information about the erlang-questions mailing list