Moved binomial to separate number-theory file.
This commit is contained in:
parent
15752bf7b4
commit
e6497178e3
|
@ -55,24 +55,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(module number-theory racket/base
|
|
||||||
(provide binomial)
|
|
||||||
|
|
||||||
; binomial : natural natural -> natural
|
|
||||||
; compute the binomial coeffecient n choose k
|
|
||||||
(define (binomial n k)
|
|
||||||
; <http://www.swox.com/gmp/manual/Binomial-Coefficients-Algorithm.html>
|
|
||||||
; http://lavica.fesb.hr/cgi-bin/info2html?(gmp)Binomial%20Coefficients%20Algorithm
|
|
||||||
; TODO: Check range of n and k
|
|
||||||
(cond
|
|
||||||
[(= k 0) 1]
|
|
||||||
[(= k 1) n]
|
|
||||||
[(= k 2) (/ (* n (- n 1)) 2)]
|
|
||||||
[(> k (/ n 2)) (binomial n (- n k))]
|
|
||||||
[else (* (+ n (- k) 1)
|
|
||||||
(for/product ([i (in-range 2 (+ k 1))])
|
|
||||||
(/ (+ n (- k) i)
|
|
||||||
i)))])))
|
|
||||||
|
|
||||||
(module undefined racket/base
|
(module undefined racket/base
|
||||||
(provide undefined undefined?)
|
(provide undefined undefined?)
|
||||||
|
@ -87,6 +70,8 @@
|
||||||
(define (symbolic-id? id)
|
(define (symbolic-id? id)
|
||||||
(or (symbol? id)
|
(or (symbol? id)
|
||||||
(and (syntax? id)
|
(and (syntax? id)
|
||||||
|
; Syntax symbolical identifiers are not in use.
|
||||||
|
; Remove this?
|
||||||
(memv (syntax-e id)
|
(memv (syntax-e id)
|
||||||
'(Plus Minus Times Quotient Power =))))))
|
'(Plus Minus Times Quotient Power =))))))
|
||||||
|
|
||||||
|
@ -790,12 +775,12 @@
|
||||||
|
|
||||||
|
|
||||||
(module bracket racket
|
(module bracket racket
|
||||||
(require (submod ".." number-theory)
|
(require "../number-theory/number-theory.rkt"
|
||||||
(submod ".." expression)
|
(submod ".." expression)
|
||||||
(submod ".." undefined)
|
(submod ".." undefined)
|
||||||
(submod ".." equation-expression)
|
(submod ".." equation-expression)
|
||||||
"graphics.rkt")
|
"graphics.rkt")
|
||||||
(provide ; (all-from-out (submod ".." symbolic-application))
|
(provide
|
||||||
(rename-out [free-of Free-of]
|
(rename-out [free-of Free-of]
|
||||||
[base Base]
|
[base Base]
|
||||||
[const Const]
|
[const Const]
|
||||||
|
|
29
number-theory/number-theory.rkt
Normal file
29
number-theory/number-theory.rkt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#lang racket/base
|
||||||
|
(provide binomial)
|
||||||
|
|
||||||
|
; binomial : natural natural -> natural
|
||||||
|
; compute the binomial coeffecient n choose k
|
||||||
|
(define (binomial n k)
|
||||||
|
; <http://www.swox.com/gmp/manual/Binomial-Coefficients-Algorithm.html>
|
||||||
|
; http://lavica.fesb.hr/cgi-bin/info2html?(gmp)Binomial%20Coefficients%20Algorithm
|
||||||
|
; TODO: Check range of n and k
|
||||||
|
(cond
|
||||||
|
[(= k 0) 1]
|
||||||
|
[(= k 1) n]
|
||||||
|
[(= k 2) (/ (* n (- n 1)) 2)]
|
||||||
|
[(> k (/ n 2)) (binomial n (- n k))]
|
||||||
|
[else (* (+ n (- k) 1)
|
||||||
|
(for/product ([i (in-range 2 (+ k 1))])
|
||||||
|
(/ (+ n (- k) i)
|
||||||
|
i)))]))
|
||||||
|
|
||||||
|
(module* test #f
|
||||||
|
(require rackunit)
|
||||||
|
; Binomial
|
||||||
|
(check-equal? (binomial 5 0) 1)
|
||||||
|
(check-equal? (binomial 5 1) 5)
|
||||||
|
(check-equal? (binomial 5 2) 10)
|
||||||
|
(check-equal? (binomial 5 3) 10)
|
||||||
|
(check-equal? (binomial 5 4) 5)
|
||||||
|
(check-equal? (binomial 5 5) 1)
|
||||||
|
(check-equal? (binomial 10 6) 210))
|
Loading…
Reference in New Issue
Block a user