; 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)