algebrite
Version:
Computer Algebra System in Coffeescript
64 lines (48 loc) • 780 B
text/coffeescript
# Binomial coefficient
#
# Input: tos-2 n
#
# tos-1 k
#
# Output: Binomial coefficient on stack
#
# binomial(n, k) = n! / k! / (n - k)!
#
# The binomial coefficient vanishes for k < 0 or k > n. (A=B, p. 19)
Eval_binomial = ->
push(cadr(p1))
Eval()
push(caddr(p1))
Eval()
binomial()
binomial = ->
save()
ybinomial()
restore()
#define N p1
#define K p2
ybinomial = ->
p2 = pop()
p1 = pop()
if (BINOM_check_args() == 0)
push(zero)
return
push(p1)
factorial()
push(p2)
factorial()
divide()
push(p1)
push(p2)
subtract()
factorial()
divide()
BINOM_check_args = ->
if (isnum(p1) && lessp(p1, zero))
return 0
else if (isnum(p2) && lessp(p2, zero))
return 0
else if (isnum(p1) && isnum(p2) && lessp(p1, p2))
return 0
else
return 1