fork download
  1. ; frequency counts
  2.  
  3. (define (freq vec)
  4. (let ((n (vector-length vec)))
  5. (let loop ((i 0))
  6. (cond ((= i n) (do ((j 0 (+ j 1))) ((= j n))
  7. (when (negative? (vector-ref vec j))
  8. (display (+ j 1)) (display " ")
  9. (display (- (vector-ref vec j))) (newline))))
  10. ((not (positive? (vector-ref vec i))) (loop (+ i 1)))
  11. (else (let ((idx (- (vector-ref vec i) 1)))
  12. (cond ((positive? (vector-ref vec idx))
  13. (vector-set! vec i (vector-ref vec idx))
  14. (vector-set! vec idx -1)
  15. (loop i))
  16. (else (vector-set! vec idx
  17. (- (vector-ref vec idx) 1))
  18. (vector-set! vec i 0)
  19. (loop (+ i 1))))))))))
  20.  
  21. (freq '#(2 3 3 2 5))
  22.  
  23. (define (freq vec)
  24. (let ((n (vector-length vec)))
  25. (do ((i 0 (+ i 1))) ((= i n))
  26. (vector-set! vec i
  27. (- (vector-ref vec i) 1)))
  28. (do ((i 0 (+ i 1))) ((= i n))
  29. (vector-set! vec (modulo (vector-ref vec i) n)
  30. (+ (vector-ref vec (modulo (vector-ref vec i) n)) n)))
  31. (do ((i 0 (+ i 1))) ((= i n))
  32. (when (< n (vector-ref vec i))
  33. (display (+ i 1)) (display " ")
  34. (display (quotient (vector-ref vec i) n)) (newline)))
  35. (do ((i 0 (+ i 1))) ((= i n))
  36. (vector-set! vec i
  37. (+ (remainder (vector-ref vec i) n) 1)))
  38. (display vec) (newline))) ; show that vec is unchanged
  39.  
  40. (freq '#(2 3 3 2 5))
Success #stdin #stdout 0.01s 50224KB
stdin
Standard input is empty
stdout
2 2
3 2
5 1
2 2
3 2
5 1
#(2 3 3 2 5)