<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><br></blockquote>
Philosophically, the idea that boolean operations like x in y should be able to return any value for True makes sense. The details leave much to be desired. It wouldn't make sense for it to return x since 0 in [0,1] and '' in 'string' should both return a true value and 0 and '' are false.<div>

<br><div><br><div class="gmail_quote">On Mon, Sep 12, 2011 at 1:20 PM, Lukas Lueg <span dir="ltr"><<a href="mailto:lukas.lueg@googlemail.com">lukas.lueg@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
x = set((1,2,3,4,5))<br>
y = set((2,3,4))<br>
z = x > y<br>
print z == True<br>
>> True<br>
print z<br>
>> set([1,5]) # equivalent to x - y<br></blockquote><div><br></div><div>You've lost me where you suggest changing the behavior of == True. And where you propose that x > y should return x - y. You also don't mention what x < y should return. The real problem is the lack of a compelling scenario why you'd want to make this change.</div>

<div><br></div><div>Aside from that, checking to see if one set is contained in another does not require computation of the full difference. Why should</div><div><br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">

<div class="gmail_quote"><div>very_big_set > (1,2)</div></div></blockquote><div class="gmail_quote"><div><br></div><div>go to the overhead of constructing a still very big set that's going to be immediately discarded?</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
z = x < y<br>
print z == True<br>
>> False<br>
print z<br>
>> set([]) # equivalent to y - x<br>
<br>
print 3 > 2<br>
>> 1<br>
print (3 > 2) == True<br>
>> True<br></blockquote><div><br></div><div>I don't know the scenario where 3 > 2 returning 1 is useful. Would 2 < 3 also return 1? The Icon programming language (and others) has 2 < 3 return 3. This makes expressions like 2 < 3 < 4 work. And in fact python and/or operators work in exactly the same way returning the value that determines the answer (2 and 3) equals 3.</div>

<div><br></div><div>Icon can do this because it has a special result 'fail' which blocks further evaluation, roughly equivalent to 1 < 0 throwing an exception. It wouldn't work in Python for lots of reasons.</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
The object-example from above now tells us how boolean behaviour and<br>
arithmetic behaviour go hand in hand: "(setA > setB) or (setA < setB)"<br>
is True because "set([1,5]).__bor__(set([]))" is the same as<br>
"set([1,5]) + set([])" and equivalent to True in a boolean context.<br>
Likewise, "(setA > setB) and (setA < setB)" is False because<br>
"set([1,5]).__band__set([])" is just "set([])". It follows that "(setA<br>
> setB) == (setA - setB) == (setA & setB)".</blockquote><div><br></div><div><div>So what? This isn't a general principle or anything. All you've done is say that if you define set<set to return non-bool values and __band__ and __bor__ preserve the invariants</div>

<div><br></div><div>bool(x.__band__(y)) is bool(x and y)</div><div><div>bool(x.__bor__(y)) is bool(x or y)</div></div></div><div><br></div><div>This doesn't prove that "(setA > setB) or (setA < setB)" is always true or anything (because it isn't of course).</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">We can't do this with<br>
boolean operations being part of the language only.<br></blockquote><div><br></div><div>Nor do we need to. Figuring out the value of "(setA > setB) or (setA < setB)" is much more less convoluted than that.</div>

</div><div><br clear="all"><font face="arial, helvetica, sans-serif">--- Bruce</font><div><font face="arial, helvetica, sans-serif">Follow me: <a href="http://www.twitter.com/Vroo" target="_blank">http://www.twitter.com/Vroo</a> <a href="http://www.vroospeak.com/" target="_blank">http://www.vroospeak.com</a></font></div>

<div><font face="arial, helvetica, sans-serif"><br></font></div></div></div></div>