(define (tri-lineaire v) (let ((vmin (vector-ref v (rmin v))) (vmax (vector-ref v (rmax v)))) (let ((b (make-vector (vector-length v))) (c (make-vector (+ 1 (- vmax vmin)) 0))) (do ((i 0 (+ i 1))) ((>= i (vector-length v)) 'done) (vector-set! c (- (vector-ref v i) vmin) (+ 1 (vector-ref c (- (vector-ref v i) vmin))))) (do ((i 1 (+ i 1))) ((>= i (vector-length c)) 'done) (vector-set! c i (+ (vector-ref c (- i 1)) (vector-ref c i)))) (do ((i 0 (+ i 1))) ((>= i (vector-length v)) b) (vector-set! b (- (vector-ref c (- (vector-ref v i) vmin)) 1) (vector-ref v i)) (vector-set! c (- (vector-ref v i) vmin) (- (vector-ref c (- (vector-ref v i) vmin)) 1))))))