RosettaCodeData/Task/Evaluate-binomial-coefficients/Factor/evaluate-binomial-coefficie...

16 lines
340 B
Factor

: fact ( n -- n-factorial )
dup 0 = [ drop 1 ] [ dup 1 - fact * ] if ;
: choose ( n k -- n-choose-k )
2dup - [ fact ] tri@ * / ;
! outputs 10
5 3 choose .
! alternative using folds
USE: math.ranges
! (product [n..k+1] / product [n-k..1])
: choose-fold ( n k -- n-choose-k )
2dup 1 + [a,b] product -rot - 1 [a,b] product / ;