fork download
  1. ; word sets
  2.  
  3. (define (alpha-set cs)
  4. (let ((s (make-vector 26 #f)))
  5. (do ((cs cs (cdr cs)))
  6. ((null? cs) s)
  7. (let ((t (- (char->integer (car cs)) 97)))
  8. (vector-set! s t #t)))))
  9.  
  10. (define (word-set s word)
  11. (let loop ((cs (string->list word)))
  12. (if (null? cs) #t
  13. (let ((t (- (char->integer (car cs)) 97)))
  14. (if (vector-ref s t) (loop (cdr cs)) #f)))))
  15.  
  16. (define s (alpha-set '(#\a #\c #\t)))
  17. (display (word-set s "act")) (newline)
  18. (display (word-set s "tact")) (newline)
  19. (display (word-set s "stop")) (newline)
  20.  
  21. (define (alpha-count cs)
  22. (let ((c (make-vector 26 0)))
  23. (do ((cs cs (cdr cs)))
  24. ((null? cs) c)
  25. (let ((t (- (char->integer (car cs)) 97)))
  26. (vector-set! c t (+ (vector-ref c t) 1))))))
  27.  
  28. (define (word-count c word)
  29. (let ((c (vector-copy c)))
  30. (let loop ((cs (string->list word)))
  31. (if (null? cs) #t
  32. (let ((t (- (char->integer (car cs)) 97)))
  33. (vector-set! c t (- (vector-ref c t) 1))
  34. (if (negative? (vector-ref c t)) #f
  35. (loop (cdr cs))))))))
  36.  
  37. (define c (alpha-count '(#\a #\c #\t)))
  38. (display (word-count c "act")) (newline)
  39. (display (word-count c "tact")) (newline)
  40. (display (word-count c "stop")) (newline)
Success #stdin #stdout 0.01s 42848KB
stdin
Standard input is empty
stdout
#t
#t
#f
#t
#f
#f