List comprehensions (was: Re: Binary comprehensions)

Carsten Schultz <>
Fri Aug 13 16:43:59 CEST 2004


Hi Luke!

On Fri, Aug 13, 2004 at 03:44:24PM +0200, Luke Gorrie wrote:
> Speaking of comprehensions, does anyone else think that the way
> multiple generators in a list comprehension works is weird? I think
> this behaviour would be better:
> 
>   [{X,Y} || X <- [1,2,3], Y <- [a,b,c]]    => [{1,a},{2,b},{3,c}]
> 
> i.e. to walk over the lists in parallel instead of trying all the
> combinations. I'm always writing code that walks down two lists in
> parallel and very rarely wanting all the combinations.

No, I do not feel like that at all.

BTW, I do not find a function like

zip([], _) -> [];
zip(_, []) -> [];
zip([X|Xs], [Y|Ys]) ->
    [{X, Y}|zip(XS, YS)].

Have I overlooked it?

GHC extends Haskell's syntax in a way you might like:
http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#PARALLEL-LIST-COMPREHENSIONS

An adaption to Erlang would look like

[{X,Y} || X <- [1,2,3] || Y <- [a,b,c]]    => [{1,a},{2,b},{3,c}]

> I'm not suggesting it be changed (of course). I just think it's funny
> that list comprehensions turn up in lots of programminig languages and
> I hardly ever see someone use more than one generator at a time.

Hm, I am not sure here.  Several generators might indeed be needed
rarely because

[{X,Y} || X <- [1,2,3], Y <- [a,b,c]]

can be replaced by

lists:append([[{X,Y} || X <- [1,2,3]] || Y <- [a,b,c]])

and you might even omit the call to append in many cases in a usual
Erlang program.

Greetings,

Carsten

-- 
Carsten Schultz (2:38, 33:47), FB Mathematik, FU Berlin
http://carsten.codimi.de/
PGP/GPG key on the pgp.net key servers, 
fingerprint on my home page.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20040813/2febf0da/attachment.bin>


More information about the erlang-questions mailing list