<br><font size=2 face="sans-serif">Hello Robert,</font>
<br>
<br><font size=2 face="sans-serif">Thanks for your explanation. I guess
that the reversal (to restore the original list order after a first "if
selected by filter then apply" traversal) is done then in the list:map/2
counterpart!</font>
<br><font size=2 face="sans-serif"><br>
My concern was that, for long lists which do not happen to have to respect
any particular order in their elements, two traversals would be done with
list comprehensions whereas just one could be sufficient. Well, a minor
concern as for such cases we can write our own functions to do so in one
pass.</font>
<br>
<br><font size=2 face="sans-serif">Thanks again,</font>
<br><font size=2 face="sans-serif">Best regards,</font>
<br><font size=2 face="sans-serif"><br>
Olivier Boudeville.<br>
---------------------------<br>
Olivier Boudeville<br>
<br>
EDF R&D : 1, avenue du Général de Gaulle, 92140 Clamart, France<br>
Département SINETICS, groupe ASICS (I2A), bureau B-226<br>
Office : +33 1 47 65 59 58 / Mobile : +33 6 16 83 37 22 / Fax : +33 1 47
65 27 13</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>robert.virding@erlang-solutions.com</b>
</font>
<p><font size=1 face="sans-serif">31/03/2011 19:40</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">A</font></div>
<td><font size=1 face="sans-serif">olivier.boudeville@edf.fr</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif">erlang-questions@erlang.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Objet</font></div>
<td><font size=1 face="sans-serif">Re: [erlang-questions] List comprehension
questions</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=3 face="Roman">List comprehensions work as a combined lists:map
and lists:filter. So you map over a list filtering out elements you don't
want in the output list. They have the added functionality that they can
handle this for nested lists.<br>
</font>
<br><font size=3 face="Roman">The expanded code is in fact quite simple
and is close to what you probably write yourself.<br>
<br>
So order is preserved and their is no call to lists:reverse when generating
the output list.<br>
<br>
Robert<br>
</font>
<br><font size=3 face="Roman">----- "Olivier BOUDEVILLE" <olivier.boudeville@edf.fr>
wrote: <br>
> <br>
> </font><font size=2 face="sans-serif">Hi,</font><font size=3 face="Roman">
<br>
> <br>
> </font><font size=2 face="sans-serif">Reading http://www.erlang.org/doc/reference_manual/expressions.html#id77052
it is not obvious that the order induced by a single generator is necessarily
preserved by the comprehension, as nevertheless suggested by all experiments
like:</font><font size=3 face="Roman"> <br>
> <br>
> </font><font size=2 face="sans-serif">1> [ X || X <- [1,2,3]
].</font><font size=3 face="Roman"> <br>
> </font><font size=2 face="sans-serif">[1,2,3]<br>
> </font><font size=3 face="Roman"><br>
> </font><font size=2 face="sans-serif">I suppose this order preservation
is true. Then, I imagine that, internally, list comprehensions are translated
to code very similar to the one that would be produced if the developer
had written an appropriate accumulator-based tail-recursive function?</font><font size=3 face="Roman">
<br>
> <br>
> </font><font size=2 face="sans-serif">If so, does it imply that using
a list comprehension on a semantically unordered set of elements will involve
a useless reversal (like lists:reverse/1) of the resulting list?</font><font size=3 face="Roman">
<br>
> <br>
> </font><font size=2 face="sans-serif">Thanks in advance for any answer,</font><font size=3 face="Roman">
<br>
> </font><font size=2 face="sans-serif">Best regards,</font><font size=3 face="Roman">
<br>
> </font><font size=2 face="sans-serif"><br>
> Olivier Boudeville.<br>
> ---------------------------<br>
> Olivier Boudeville<br>
> <br>
> EDF R&D : 1, avenue du Général de Gaulle, 92140 Clamart, France<br>
> Département SINETICS, groupe ASICS (I2A), bureau B-226<br>
> Office : +33 1 47 65 59 58 / Mobile : +33 6 16 83 37 22 / Fax : +33
1 47 65 27 13</font><tt><font size=3><br>
> <br>
> <br>
> Ce message et toutes les pièces jointes (ci-après le 'Message') sont
établis à l'intention exclusive des destinataires et les informations qui
y figurent sont strictement confidentielles. Toute utilisation de ce Message
non conforme à sa destination, toute diffusion ou toute publication totale
ou partielle, est interdite sauf autorisation expresse.<br>
> <br>
> Si vous n'êtes pas le destinataire de ce Message, il vous est interdit
de le copier, de le faire suivre, de le divulguer ou d'en utiliser tout
ou partie. Si vous avez reçu ce Message par erreur, merci de le supprimer
de votre système, ainsi que toutes ses copies, et de n'en garder aucune
trace sur quelque support que ce soit. Nous vous remercions également d'en
avertir immédiatement l'expéditeur par retour du message.<br>
> <br>
> Il est impossible de garantir que les communications par messagerie
électronique arrivent en temps utile, sont sécurisées ou dénuées de toute
erreur ou virus.<br>
> ____________________________________________________<br>
> <br>
> This message and any attachments (the 'Message') are intended solely
for the addressees. The information contained in this Message is confidential.
Any use of information contained in this Message not in accord with its
purpose, any dissemination or disclosure, either whole or partial, is prohibited
except formal approval.<br>
> <br>
> If you are not the addressee, you may not copy, forward, disclose
or use any part of it. If you have received this message in error, please
delete it and all copies from your system and notify the sender immediately
by return message.<br>
> <br>
> E-mail communication cannot be guaranteed to be timely secure, error
or virus-free.</font></tt><font size=3 face="Roman"><br>
> _______________________________________________ erlang-questions mailing
list erlang-questions@erlang.org http://erlang.org/mailman/listinfo/erlang-questions
</font>
<br><font face="monospace"><br>
<br>
<br>
Ce message et toutes les pièces jointes (ci-après le 'Message') sont établis à l'intention exclusive des destinataires et les informations qui y figurent sont strictement confidentielles. Toute utilisation de ce Message non conforme à sa destination, toute diffusion ou toute publication totale ou partielle, est interdite sauf autorisation expresse.<br>
<br>
Si vous n'êtes pas le destinataire de ce Message, il vous est interdit de le copier, de le faire suivre, de le divulguer ou d'en utiliser tout ou partie. Si vous avez reçu ce Message par erreur, merci de le supprimer de votre système, ainsi que toutes ses copies, et de n'en garder aucune trace sur quelque support que ce soit. Nous vous remercions également d'en avertir immédiatement l'expéditeur par retour du message.<br>
<br>
Il est impossible de garantir que les communications par messagerie électronique arrivent en temps utile, sont sécurisées ou dénuées de toute erreur ou virus.<br>
____________________________________________________<br>
<br>
This message and any attachments (the 'Message') are intended solely for the addressees. The information contained in this Message is confidential. Any use of information contained in this Message not in accord with its purpose, any dissemination or disclosure, either whole or partial, is prohibited except formal approval.<br>
<br>
If you are not the addressee, you may not copy, forward, disclose or use any part of it. If you have received this message in error, please delete it and all copies from your system and notify the sender immediately by return message.<br>
<br>
E-mail communication cannot be guaranteed to be timely secure, error or virus-free.</font>