Thomas Finley <tfin...@gmail.com> added the comment: Hi Raymond, thanks for your well reasoned and thorough reply. Just a couple small thoughts... I'll borrow your numbers if you don't mind.
1. I'd ask you to discount this argument. There are many situations in the Python library where empty results are possible return values. There are likewise many places in mathematics where a set as defined winds up being empty. And sure, absolutely, sometimes this empty result will be an error condition. However, right off the top of my head, I can't really think of any other place in the Python library where an empty returned iterator/list is automatically assumed to necessarily be an error. The closest I can think of right now might be key/index errors on dicts and sequences... but that's a user explicitly asking for exactly one element, in which case non-existence would be bad. In a larger sense, if a result computed by a function is sensible and well defined in itself, it doesn't seem even possible for a function to anticipate what answers might be considered error conditions by calling code. Potentially any return value for any function might be an error for some user code. So... the question then becomes, is the empty result a sensible and well defined answer. And here we differ again I see. :D 2. OK on perms. If you don't mind, I'm going to talk about combinations since that was my real motivation. Also see the wikipedia article on combinations (the "choose" function) which also expresses a factorial formula that fails for r>n. No mention is made for special handling for r>n. Hmmm. Are you looking at the definition of "choose function" under Wikipedia? http://en.wikipedia.org/wiki/Choose_function Notice the material after the "and," after the first part of the definition, in case you missed it in your first reading. So, this is the def I was taught through high school and undergrad, perhaps the same for Mark judging from his reply. You were taught it was undefined? It does sort of complicate some other defs that rely on binomial coefficients though, I'd think, but I guess you could make those work with little effort. It's not as though subtly different but incompatible definitions of basic terms are that uncommon in math... never knew the binomial coef was in that category though. You teach stats I take it? I suppose you'd know then... never heard of it, but that doesn't mean much. Oh well. (You can perhaps feel my pain at seeing the current behavior, given my understanding.) 3. For your "replacement" myperm (let's say mycomb), if you insert a "pool=tuple(iterable)" into the beginning, you'll have my fix, statement for statement. You advance this as desirable, while to my eye it was nasty enough to motivate me to submit my first patch to Python. So, you can imagine we have a slight difference of opinion. ;) Let's see if I can't present my view effectively... Saying the fix is more explicit suggests there's something implicit about the concise solution. If the choose function is defined for those values, then itertools.combinations is just unnecessarily forcing code to treat something as a special case even when it's not. So, I'd be careful to draw a distinction between "more verbose" and "more explicit." 4. Can't really speak to that. It's probably worth changing documentation in any event, even if you reject the patch. The provided equiv code and the actual behavior in this "error case" differ anyway as you noted in your second reply. Also, this error condition isn't evident from the documentation without reading and parsing the source code. A third and extraneous comment, if you do wind up changing the docs anyway, perhaps a shorter recursive solution would be easier to understand? Maybe it's just me since I'm sort of a functional type of guy, but I found the equivalent code a little hard to parse. 5. Yeah. Actually, I'm pretty sure that's why the choose function is defined piecewise, since negative factorials are undefined as you say. _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue4816> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com