algebrite
Version:
Computer Algebra System in Coffeescript
60 lines (42 loc) • 767 B
text/coffeescript
# For example, the number of five card hands is choose(52,5)
#
# n!
# choose(n,k) = -------------
# k! (n - k)!
Eval_choose = ->
push(cadr(p1))
Eval()
push(caddr(p1))
Eval()
choose()
# Result vanishes for k < 0 or k > n. (A=B, p. 19)
#define N p1
#define K p2
choose = ->
save()
p2 = pop()
p1 = pop()
if (choose_check_args() == 0)
push_integer(0)
restore()
return
push(p1)
factorial()
push(p2)
factorial()
divide()
push(p1)
push(p2)
subtract()
factorial()
divide()
restore()
choose_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