; frequency counts (define (freq vec) (let ((n (vector-length vec))) (let loop ((i 0)) (cond ((= i n) (do ((j 0 (+ j 1))) ((= j n)) (when (negative? (vector-ref vec j)) (display (+ j 1)) (display " ") (display (- (vector-ref vec j))) (newline)))) ((not (positive? (vector-ref vec i))) (loop (+ i 1))) (else (let ((idx (- (vector-ref vec i) 1))) (cond ((positive? (vector-ref vec idx)) (vector-set! vec i (vector-ref vec idx)) (vector-set! vec idx -1) (loop i)) (else (vector-set! vec idx (- (vector-ref vec idx) 1)) (vector-set! vec i 0) (loop (+ i 1)))))))))) (freq '#(2 3 3 2 5)) (define (freq vec) (let ((n (vector-length vec))) (do ((i 0 (+ i 1))) ((= i n)) (vector-set! vec i (- (vector-ref vec i) 1))) (do ((i 0 (+ i 1))) ((= i n)) (vector-set! vec (modulo (vector-ref vec i) n) (+ (vector-ref vec (modulo (vector-ref vec i) n)) n))) (do ((i 0 (+ i 1))) ((= i n)) (when (< n (vector-ref vec i)) (display (+ i 1)) (display " ") (display (quotient (vector-ref vec i) n)) (newline))) (do ((i 0 (+ i 1))) ((= i n)) (vector-set! vec i (+ (remainder (vector-ref vec i) n) 1))) (display vec) (newline))) ; show that vec is unchanged (freq '#(2 3 3 2 5))