; word sets (define (alpha-set cs) (let ((s (make-vector 26 #f))) (do ((cs cs (cdr cs))) ((null? cs) s) (let ((t (- (char->integer (car cs)) 97))) (vector-set! s t #t))))) (define (word-set s word) (let loop ((cs (string->list word))) (if (null? cs) #t (let ((t (- (char->integer (car cs)) 97))) (if (vector-ref s t) (loop (cdr cs)) #f))))) (define s (alpha-set '(#\a #\c #\t))) (display (word-set s "act")) (newline) (display (word-set s "tact")) (newline) (display (word-set s "stop")) (newline) (define (alpha-count cs) (let ((c (make-vector 26 0))) (do ((cs cs (cdr cs))) ((null? cs) c) (let ((t (- (char->integer (car cs)) 97))) (vector-set! c t (+ (vector-ref c t) 1)))))) (define (word-count c word) (let ((c (vector-copy c))) (let loop ((cs (string->list word))) (if (null? cs) #t (let ((t (- (char->integer (car cs)) 97))) (vector-set! c t (- (vector-ref c t) 1)) (if (negative? (vector-ref c t)) #f (loop (cdr cs)))))))) (define c (alpha-count '(#\a #\c #\t))) (display (word-count c "act")) (newline) (display (word-count c "tact")) (newline) (display (word-count c "stop")) (newline)