Author mark.dickinson
Recipients TFinley, mark.dickinson, rhettinger
Date 2009-01-07.20:34:59
SpamBayes Score 0.156848
Marked as misclassified No
Message-id <1231360501.87.0.83319736973.issue4816@psf.upfronthosting.co.za>
In-reply-to
Content
> 5. This one bugs me a bit.  It is nice to have all the factorial
> formulas just work and not have a piecewise definition.

IIRC, in the 'Concrete Mathematics' book, Knuth and co use something
like

(n choose k) = (n-to-the-k-falling)/k!

to get around this:  this definition works for all k >= 0 and all
integers (or even real numbers) n.  Here x-to-the-k-falling means
x * (x-1) * ... * (x-k+1).  See:

http://mathworld.wolfram.com/FallingFactorial.html

> Another thought before I forget:  The piecewise definition of the
> choose function or for binomial coefficients suggests that
> supporting the r>n case should be accompanied by supporting 
> the r<0 case.

I'd say not:  in the context of sets of combinations/permutations,
(rather than just defining the nCr or nPr symbols) r has a
definite meaning as a cardinality:   "enumerate all subsets of
iter of cardinality r" and so it makes sense to me to restrict to
the case where r is nonnegative.

(If we were talking about the integer-valued function nCr, then I'd
agree.)

My own guess would be that having combinations(range(n), r)
give the empty iterator for r > n is the right thing in the
vast majority of situations, even (especially?) where the
programmer hasn't anticipated the possibility of r > n.
I have yet to see a case where it's useful to raise ValueError.

I have access to the Magma algebra package at work;  I'll
check tomorrow or Friday to see what that does.
History
Date User Action Args
2009-01-07 20:35:02mark.dickinsonsetrecipients: + mark.dickinson, rhettinger, TFinley
2009-01-07 20:35:01mark.dickinsonsetmessageid: <1231360501.87.0.83319736973.issue4816@psf.upfronthosting.co.za>
2009-01-07 20:35:01mark.dickinsonlinkissue4816 messages
2009-01-07 20:34:59mark.dickinsoncreate