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