#lang racket (define (gamma number) (if (> 1/2 number) (/ pi (* (sin (* pi number)) (gamma (- 1.0 number)))) (let ((n (sub1 number)) (c '(0.99999999999980993 676.5203681218851 -1259.1392167224028 771.32342877765313 -176.61502916214059 12.507343278686905 -0.13857109526572012 9.9843695780195716e-6 1.5056327351493116e-7))) (* (sqrt (* pi 2)) (expt (+ n 7 0.5) (+ n 0.5)) (exp (- (+ n 7 0.5))) (+ (car c) (apply + (for/list ((i (in-range (length (cdr c)))) (x (in-list (cdr c)))) (/ x (+ 1 n i))))))))) (map gamma '(0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0)) ;-> ;'(9.513507698668736 ; 4.590843711998802 ; 2.9915689876875904 ; 2.218159543757687 ; 1.7724538509055159 ; 1.489192248812818 ; 1.2980553326475577 ; 1.1642297137253037 ; 1.068628702119319 ; 1.0)