<p dir="ltr">Le 23 juil. 2013 10:54, &quot;Costello, Roger L.&quot; &lt;<a href="mailto:costello@mitre.org">costello@mitre.org</a>&gt; a écrit :<br>
&gt;<br>
&gt; Hi Folks,<br>
&gt;<br>
&gt; I have a list of singletons:<br>
&gt;<br>
&gt;         xs = [(&quot;a&quot;)]<br>
&gt;<br>
&gt; f is a function that, given an argument x, it returns the argument:<br>
&gt;<br>
&gt;         f x = x<br>
&gt;<br>
&gt; g is a function that, given an argument x, it returns the empty list:<br>
&gt;<br>
&gt;         g x = []<br>
&gt;<br>
&gt; I have a list comprehension that extracts the singletons from xs using f and g, and creates a pair from their output:<br>
&gt;<br>
&gt;         [(a,b) | a &lt;- f xs, b &lt;- g xs]<br>
&gt;<br>
&gt; I executed this and the result is the empty list:<br>
&gt;<br>
&gt;         []<br>
&gt;<br>
&gt; That is odd. Why is the empty list the result?</p>
<p dir="ltr">This is pretty normal since there are no elements in &quot;g xs&quot; so b can takes no values. You have got some excellent answers on that but I think your problem is more fundamental :</p>
<p dir="ltr">&gt; f x = x</p>
<p dir="ltr">This function does nothing or more precisely it is the identity, you can replace &quot;f anything&quot; by &quot;anything&quot; and have exactly the same result.</p>
<p dir="ltr">&gt; g x = []</p>
<p dir="ltr">This function just takes anything and returns an empty list. So</p>
<p dir="ltr">&gt; [(a,b) | a &lt;- f xs, b &lt;- g xs]</p>
<p dir="ltr">Is exactly the same as :</p>
<p dir="ltr">&gt; [(a,b) | a &lt;- xs, b &lt;- [] ]</p>
<p dir="ltr">If xs is [&quot;a&quot;] that becomes</p>
<p dir="ltr">&gt; [(a,b) | a &lt;- [&quot;a&quot;], b &lt;- [] ]</p>
<p dir="ltr">I think those f and g didn&#39;t work like that in your mind so could you explain what you thought they should do (with some examples maybe).</p>
<p dir="ltr">-- <br>
Jedaï<br>
</p>