;;;; srfi.27.cauchys.scm ;;;; Kon Lovett, Dec '17 ;;;; Kon Lovett, Jun '17 ;;;; Kon Lovett, May '06 ; Chicken Generic Arithmetic! (would use fp routines, except for the "real" constraint) (module srfi.27.cauchys (;export *make-random-cauchys make-random-cauchys) (import scheme (chicken base) (chicken type) (only (type-checks-numbers scheme) check-real) (only type-checks-structured check-procedure) (srfi 27) srfi-27-distributions-support) ;;; (include-relative "srfi-27-common-types") (: *make-random-cauchys (number number random-real-function -> number-function)) (: make-random-cauchys (#!rest -> number-function procedure)) ;;; Cauchy distribution (define (*make-random-cauchys median sigma randoms) (lambda () (+ median (* sigma (tan (* *pi* (- (randoms) 0.5)))))) ) (define (make-random-cauchys #!key median sigma randoms) ;delay the argument check until known if supplied or default (let ((median (if (not median) 0 (check-real 'make-random-cauchys median 'median))) (sigma (if (not sigma) 1 (check-positive-real 'make-random-cauchys sigma 'sigma))) (randoms (if (not randoms) (current-random-real) (check-procedure 'make-random-cauchys randoms 'randoms))) ) (values (*make-random-cauchys median sigma randoms) (lambda () (values median sigma randoms))) ) ) ) ;module srfi.27.cauchys