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