Evaluate binomial coefficients: Difference between revisions

→‎{{header|Python}}: Added a second (Python 3 compatible) functional version
(→‎Functional Applescript: Added a reduced variant of the main function)
(→‎{{header|Python}}: Added a second (Python 3 compatible) functional version)
Line 1,865:
 
=={{header|Python}}==
===Imperative===
Straight-forward implementation:
<lang python>def binomialCoeff(n, k):
result = 1
Line 1,877:
<pre>10</pre>
 
===Functional===
'''Alternate implementation'''
<lang python>from operator import mul
def comb(n,r):
Line 1,895:
return int( reduce( mul, range((n-r+1), n+1), 1) /
reduce( mul, range(1,r+1), 1) )</lang>
 
 
Or, updating for Python 3, and abstracting a little more for legibility and ease of reuse, while currying for ease of mapping and general composition:
 
<lang python>from functools import reduce
 
 
# binomialCoefficient :: Int -> Int -> Int
def binomialCoefficient(n):
return lambda k: product(
enumFromTo(1 + k)(n)
) // factorial(n - k)
 
 
# GENERIC -------------------------------------------------
 
# enumFromTo :: Int -> Int -> [Int]
def enumFromTo(m):
return lambda n: range(m, 1 + n)
 
 
# factorial :: Int -> Int
def factorial(x):
return product(range(1, 1 + x))
 
 
# product :: [Num] -> Num
def product(xs):
return reduce(lambda a, b: a * b, xs, 1)
 
 
# TEST -------------------------------------------------
print(
binomialCoefficient(5)(3)
)</lang>
 
=={{header|R}}==
9,659

edits