; anagrams, again

(define (anagram? str1 str2)
  (if (not (= (string-length str1) (string-length str2))) #f
    (let ((buckets (make-vector 256 0)))
      (do ((cs (string->list str1) (cdr cs))) ((null? cs))
        (let ((i (char->integer (car cs))))
          (vector-set! buckets i (+ (vector-ref buckets i) 1))))
      (do ((cs (string->list str2) (cdr cs))) ((null? cs))
        (let ((i (char->integer (car cs))))
          (vector-set! buckets i (- (vector-ref buckets i) 1))))
      (let loop ((i 0))
        (if (= i 256) #t
          (if (not (zero? (vector-ref buckets i))) #f
            (loop (+ i 1))))))))

(display (anagram? "time" "emit")) (newline)