;;; SIGNATUR ;;; histogram: list(number) number number -> vector(number) ;;; ERKLÄRUNG ;;; (histogram numbers low up) erzeugt einen Vektor mit up-low+1 Elementen, ;;; deren i-tes die Anzahl der Vorkommen der Zahl i+low in numbers angibt. ;;; Zahlen, die up sind, werden dabei nicht berücksichtigt. ;;; BEISPIEL ;;; (histogram '(1 2 4 4 4 10) 1 4) ;;; => (vector 1 1 0 3) ;;; DEFINITION (define histogram (lambda (numbers low up) (let ((frequency (make-vector (add1 (- up low)) 0))) (let loop ((n numbers)) (if (null? n) frequency (begin (if (<= low (car n) up) (vector-inc! frequency (- (car n) low))) (loop (cdr n)))))))) ;;; SIGNATUR ;;; vector-inc!: vector(number) number -> VOID ;;; ERKLÄRUNG ;;; (vector-inc! vector k) erhöht das k-te Element in vector. Dabei muß k ;;; ein gültiger Index von vector sein. ;;; BEISPIEL ;;; (define v (vector 1 2 3)) ;;; (vector-inc! v 0) ;;; v => (vector 2 2 3) ;;; DEFINITION (define vector-inc! (lambda (vector k) (vector-set! vector k (add1 (vector-ref vector k)))))