<div dir="ltr">Hi Vsevolod,<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="gmail_extra" style="font-family:arial,sans-serif;font-size:13px">

<div class="gmail_quote"><div>After the evaluating of the generator the only this item remains available for the following operations. So, filtering for example, the returned sequence we may use only the item value in a filter expression:</div>

<div><br></div></div></div><blockquote style="font-family:arial,sans-serif;font-size:13px;margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><font face="courier new, monospace">>>> filter(lambda x:x[0]==2,[(v,k) for k in d for v in d[k]])</font></div>

</div><div class="gmail_extra"><div class="gmail_quote"><font face="courier new, monospace">[(2, 'a')]</font></div></div></blockquote><div class="gmail_extra" style="font-family:arial,sans-serif;font-size:13px"><div class="gmail_quote">

<div><br></div><div>The same rule should be appied IMHO to the lambda-filter expression which is used to filter the query: the only item returned in the query result may be used. This particular item is an only lambda parameter of the lambda-filter, so we are free to use any name for it.</div>

</div></div></blockquote><div><br></div><div>Your arguments looks valid, I think we should change how filter works in release 0.5. This will reduce some possibilities that filter has now with multiple for-loops, but will make filter method more intuitive and easy to use.</div>

<div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Oct 25, 2013 at 12:59 AM, Vsevolod Novikov <span dir="ltr"><<a href="mailto:nnseva@gmail.com" target="_blank">nnseva@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Alexander,<div><br><div class="gmail_extra"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div dir="ltr"><div><div class="gmail_extra">>�<span style="font-family:arial,sans-serif;font-size:13px">Is this inconvinience particularly one which you meant, or something other?</span></div><div class="gmail_extra">




<br></div></div><div class="gmail_extra">Don't remember I said something like that, I spoke purely about performance of INTERSECT / UNION in SQL</div></div></blockquote><div><br></div></div><div>I meant this "<span style="font-family:arial,sans-serif;font-size:13px">This way of filtering should works in the development version of Pony (it was accidentally broken in the last release 0.4.8, but will be restored in the upcoming release 0.4.9)", but I see now that the development version works fine as described.</span></div>

<div class="im">
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<span style="font-family:arial,sans-serif;font-size:13px">It will be non-intuitive if parameter name can be arbitrary when query has only one for-loop, but becomes non-arbitrary with multiple for-loops.</span></blockquote>


<div><br></div></div><div>I didnt mean that.</div><div><br></div><div>Look here for example:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote">


<div><div><font face="courier new, monospace">>>> d = {</font></div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">... � 'a':[1,2,3],</font></div>


</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">... � 'b':[4,5],</font></div></div></div></div><div class="gmail_extra">
<div class="gmail_quote"><div><div><font face="courier new, monospace">... � 'c':[6,7]</font></div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>
<font face="courier new, monospace">... }</font></div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div><div><font face="courier new, monospace">>>> [(v,k) for k in d for v in d[k]]</font></div>


</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">[(1, 'a'), (2, 'a'), (3, 'a'), (6, 'c'), (7, 'c'), (4, 'b'), (5, 'b')]</font></div>


</div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>You can see that the generator turns the first circle and then the second one, but always returns only one item - the (v,k) pair - every turn. After the evaluating of the generator the only this item remains available for the following operations. So, filtering for example, the returned sequence we may use only the item value in a filter expression:</div>


<div><div><br></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">>>> filter(lambda x:x[0]==2,[(v,k) for k in d for v in d[k]])</font></div>


</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">[(2, 'a')]</font></div></div></div></div></blockquote><div class="gmail_extra">
<div class="gmail_quote"><div><br></div><div>The same rule should be appied IMHO to the lambda-filter expression which is used to filter the query: the only item returned in the query result may be used. This particular item is an only lambda parameter of the lambda-filter, so we are free to use any name for it. � �<br>


</div><div><br></div><div>Another syntax case should be applied IMHO if the filter is included DIRECTLY into the generator like here:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px">
<div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">>>> [(v,k) for k in d for v in d[k] if v != 1 and k != 'c']</font></div></div></div>
</div><div class="gmail_extra"><div class="gmail_quote"><div><div><font face="courier new, monospace">[(2, 'a'), (3, 'a'), (4, 'b'), (5, 'b')]</font></div></div></div>
</div></blockquote>The filter here may use any variable in the context of the generator and this is usual python language syntax and semantic.<div><br></div><div>Regards,</div><div>Vsevolod</div><div><br>
</div></div></div>
<br>_______________________________________________<br>
ponyorm-list mailing list<br>
<a href="mailto:ponyorm-list@ponyorm.org">ponyorm-list@ponyorm.org</a><br>
<a href="/ponyorm-list" target="_blank">/ponyorm-list</a><br>
<br></blockquote></div><br></div>