On Jul 1, 2012, at 4:17 PM, Sean Kemplay wrote:

> Looking back, I am wondering if my solution is a bit of a cheat - 
> specifically :
> 
> (define (insert-everwhere/in-one-word s word)
>  (make-words s word word))


It's not a cheat, it's wrong. I did you a favor and worked out a failing test 
case. See below. 


On Jul 1, 2012, at 6:46 PM, Dave Yrueta wrote:

> Try working through this exercise by systematically applying the design 
> recipe.  That is, take the time to make your data definitions explicit, and 
> begin the definition of each helper function with a contract, purpose 
> statement, and template.  In my opinion, more than any other exercise in 
> HtDP, the solution to this exercise relies on paying very close attention to 
> how the data definitions, function contracts and function templates interact. 
> If you allow the data definitions to shape the function templates, and are 
> rigorous about ensuring the function designs conform to their contracts, the 
> solution should fall into place.  


The above is the best advice the list can give you. -- Matthias




;; World  = [Listof Letter] ;; see chapter IV
;; Letter = Symbol 

;; Letter Word -> [Listof Word]
;; the function says: insert _s_ in all positions in _word_

(check-expect (insert-everwhere/in-one-word 'a '(w o)) 
              '((a w o) (w a o) (w o a)))
(check-expect (insert-everwhere/in-one-word 'a '(w w o)) 
              '((a w w o) (w a w o) (w w a o) (w w o a)))

(define (insert-everwhere/in-one-word s word)
 (make-words s word word))

;; Letter Word Word -> [Listof Word]
;; insert _s_ in all positions in _word2_ using _word1_ as a list of insertion 
points 
;; intended usage: (make-words letter word word) i.e. word1 = word2 initially 

(check-expect (make-words 'a '(w o) '(w o)) '((a w o) (w a o) (w o a)))
(check-expect (make-words 'a '(w w o) '(w w o)) '((a w w o) (w a w o) (w w a o) 
(w w o a)))

(define (make-words s word1 word2)
 (cond
   [(empty? word1) (cons (append word2 (cons s empty)) empty)]
   [else (cons (insert-symbol s (first word1) word2) (make-words s (cdr word1) 
word2))]))


;; Letter Letter Word -> Word 
;; add _new_ in front of each occurrence of _old_ in _word_ 

(check-expect (insert-symbol 'a 'b '(c d e)) '(c d e)) ;; running in BSL with ..
(check-expect (insert-symbol 'a 'b '(b o b)) '(a b o a b)) 

(define (insert-symbol new old word)
 (cond
   [(empty? word) empty]
   [(symbol=? (first word) old) (cons new (cons old (insert-symbol new old 
(rest word))))]
   [else (cons (first word) (insert-symbol new old (rest word)))]))


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to