; this is assuming that the input is case-insensitive and will terminate on ; any non-alphabetic character (define (trie-new) (make-vector 27 0)) (define (trie-insert tr s) (let ((tr (trie-new)) (l (string-length s))) (let loop ((i 0) (t tr)) (if (= i l) (begin (vector-set! t 26 (+ 1 (vector-ref t 26))) tr) (let ((c (char->integer (char-downcase (string-ref s i))))) (cond ((or (< c 0) (> c 25)) (vector-set! t 26 (+ 1 (vector-ref t 26))) (loop (+ 1 i) tr)) ((vector? (vector-ref t c)) (loop (+ 1 i) (vector-ref t c))) (else (let ((tn (trie-new))) (vector-set! tn 26 (vector-ref t c)) (vector-set! t c tn) (loop (+ 1 i) tn)))))))))