[plt-scheme] HtDP newbie question, 12.4.2

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Fri Mar 28 11:58:02 EDT 2008

Okay you have gotten to the point where you're jumping even faster.  
Slogan:

  furiously fast programming leads to nowhere.

;; ---

All I was getting at is a simple point:

Your recursive calls in insert-everywhere/one-word produced almost  
all the work in the recursion. Indeed, it always produces all but one  
word, except that the first letter from the original word is missing.  
Example:

    given:          the recursion                           in the  
final result I want                    plus
   'X   "ATE"     "X" "TE" --> "XTE" "TXE" "TEX"     "AXTE" "ATXE"  
"ATXE" "ATEX"           "XATE"

Given the recursive result (the list of words that are too short by  
the first letter in the orginal word) can you design a function that  
adds this letter (no matter what it is) to the front of all these  
words you have gotten back?

DONE?

After that: what is missing?

-- Matthias





On Mar 28, 2008, at 11:51 AM, Cooke Kelsey wrote:

> OK, that helps me a little.  If I insert "cons (first word)," then  
> I can rebuild the word:
>
> (define (cons-function word)
>   (cond
>     [(empty? (rest word)) word]
>     [else (cons (first word) (cons-function (rest word)))]))
>
> (cons-function (list 'A 'T 'W)) = (list 'A 'T 'W)
>
> The problem is how to add this to a shrinking function:
>
> (define (shrinking-function s word)
>   (cond
>     [(empty? (rest word)) empty]
>     [else (list (append (list s) word) (shrinking-function s (rest  
> word)))]))
> (This shrinking function isn't exactly what I want, but at least it  
> gives me (list 'X 'A 'T 'W) and (list 'X 'T 'W)).
>
> So I append them together:
>
> (append (cons-function (list 'A 'T 'W)) (shrinking-function 'X  
> (list 'A 'T 'W)))
>
> And I get this:
>
> (list (list 'X 'A 'T 'W) (list (list 'X 'T 'W) empty)) (list 'A 'T  
> 'W (list 'X 'A 'T 'W) (list (list 'X 'T 'W) empty))
>
> Garbage!
>
> As a last resort, I try to combine cons and shrinking functions  
> together:
>
> (define (cons+shrinking-function s word)
>   (cond
>     [(empty? (rest word)) word]
>     [else (append (cons (first word) (cons+shrinking-function 'X  
> (rest word))) (list s) (rest word))]))
>
> (cons+shrinking-function 'X (list 'A 'T 'W)) = (list 'A 'T 'W 'X 'W  
> 'X 'T 'W)
>
> It looks kind of nice, but it is even further from the expected  
> result.
>
>
> Matthias Felleisen <matthias at ccs.neu.edu> wrote:
>
> How about (cons 'A (list 'X 'T)) = (list 'A 'X 'T)
>
>
>
>
> On Mar 28, 2008, at 10:53 AM, Cooke Kelsey wrote:
>> (append (list 'A) (list 'X 'T)) = (list 'A 'X 'T)
>>
>> Matthias Felleisen <matthias at ccs.neu.edu> wrote:
>>
>> Here is a definition of 'adding in the missing element':
>>
>> * If a list X misses the symbol 'A (at the front), how do you get  
>> a list that has the 'A and all of X?
>>
>> * X = (list 'X 'T) and 'A --> I want (list 'A 'X 'T). How do I do  
>> that?
>>
>> -- Matthias
>>
>>
>> Be a better friend, newshound, and know-it-all with Yahoo! Mobile.  
>> Try it now.
>
>
>
> Never miss a thing. Make Yahoo your homepage.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20080328/79bfe3b9/attachment.html>

Posted on the users mailing list.