;; ;; 6.090 IAP '05 - hw7code.scm ;; (define (string-search-forward substr string) (letrec ((substrlen (string-length substr)) (ssf-helper (lambda (substr string n) (if (< (string-length string) substrlen) #f (if (string=? substr (substring string 0 substrlen)) n (ssf-helper substr (substring string 1 (string-length string )) (+ n 1))))))) (ssf-helper substr string 0))) (define (string-head string end) (substring string 0 end)) (define (string-tail string start) (substring string start (string-length string))) (define (pick-random lst) (if (null? lst) null (list-ref lst (random (length lst))))) (define (string-explode s) (let ((space (string-search-forward " " s))) (if (not space) (list s) (cons (string-head s space) (string-explode (string-tail s (+ space 1))))))) (define (restore-string lst) (if (null? lst) "" (if (null? (cdr lst)) (car lst) (string-append (car lst) " " (restore-string (cdr lst)))))) (define empty-thesaurus null) (define simple-thesaurus (add-to-thesaurus (make-entry "victory" (list "conquest" "triumph" "win")) (add-to-thesaurus (make-entry "ball" (list "globe" "orb" "rondure" "sphere")) (add-to-thesaurus (make-entry "store" (list "market" "outlet" "shop")) empty-thesaurus)))) (define full-thesaurus (add-to-thesaurus (make-entry "victory" (list "conquest" "triumph" "win")) (add-to-thesaurus (make-entry "ball" (list "globe" "orb" "rondure" "sphere")) (add-to-thesaurus (make-entry "store" (list "market" "outlet" "shop")) (add-to-thesaurus (make-entry "bat" (list "baton" "bludgeon" "cudgel" "truncheon")) (add-to-thesaurus (make-entry "hit" (list "strike" "clout" "whack")) (add-to-thesaurus (make-entry "edifice" (list "erection" "pile" "structure")) (add-to-thesaurus (make-entry "museum" (list "gallery")) (add-to-thesaurus (make-entry "grand" (list "impressive" "gorgeous" "splendid")) empty-thesaurus)))))))))