Petr Prikryl wrote: > for element in aCollection: > if element > 0: > return True > return False
[I'm not sure whether this is supposed to be an example of some specific language (Python ?) or just a generic illustration. I'll take it as the latter, since it makes my point easier to express. I'll also exaggerate, just a little...] But now, in order to hack around the absence of a sensible and useful feature -- /only/ in order to do so -- you have added two horrible new complications to your language. You have introduced a special syntax to express conditionals, and (worse!) a special syntax to express looping. Not only does that add a huge burden of complexity to the syntax, and semantics, of the language (and, to a lesser extent, its implementation), but it also throws out any semblance of uniformity. Once you've started down that route then you've lost all hope of user-defined control structures which operate on a par with the built-in ones. And please note that "control structures" are not limited to C-style "for" "while" etc. E.g. in Java there's an unresolved, and irresolvable, tension between whether a failing operation should return an error condition or throw an exception -- the problem is that exceptions are (IMO and most other peoples' here) intended for exceptional conditions, and for many operations "failure" is not exceptional. One, highly effective, resolution to the problem is for the operation to be parameterised with the action to take if it fails (defaulting to code to raise an exception). In Java that approach, though technically possible, is totally infeasible due to the pathetic overuse of unwanted syntax, and the underuse of simple and powerful primitives. E.g. can you add three-way comparisons (less-than, same-as, greater-than to, say, Python with corresponding three-way conditional control structures to supplement "if" etc ? Are they on a semantic and syntactic par with the existing ones ? In Smalltalk that is trivial (too trivial to be particularly interesting, even), and I presume the same must be true of Lisp (though I suspect you might be forced to use macros). I should say that if your example /is/ in fact Python, then I believe that language allows fairly deep hooks into the execution mechanism, so that at least the "for" bit can be mediated by the collection itself -- which is better than nothing, but nowhere near what I would call "good". -- chris -- http://mail.python.org/mailman/listinfo/python-list