<div>Dear Dr. Felleisen, </div> <div>thanks so much for responding! Your suggestions really helped me to think about the problem.</div> <div> </div> <div>Here's a table of examples, as you suggested:</div> <div> </div> <div>;;Examples <BR>; s | low |(first..)|(rest..) | result<BR>;--------------------------------------------------------------------------------------------------------<BR>; X | '(AT) |'(AT) |empty | '((XAT) (AXT) (ATX))<BR>; X | '((AB) (CD) (EF))|'(AB) |'((CD) (EF))| '((XAB) (AXB) (ABX) (XCD) (CXD) (CDX) (XEF) (EXF) (EFX))<BR></div> <div>Here's an attempt to "go from the first columns to the last": </div> <div><BR>; Definitions:<BR>(define (insert-everywhere/in-all-words s low)<BR>
(cond<BR> [(empty? (rest low)) empty]<BR> [else (append (insert-in-single-word s (first low)) (insert-everywhere/in-all-words s (rest low)))]))</div> <div> </div> <div>(define (insert-in-single-word s word)<BR> (cond<BR> [(empty? (rest word)) empty]<BR> [else (append (list (first word) s (rest word)) (insert-in-single-word s (rest word)))]))<BR></div> <div>Unfortunately, the list of words gets shorter and shorter (sATX, sTX, sX). I tried to think of a way to add a recursive "prefix" that gets longer, but each time the function cycles the first letters seem to disappear into the void...</div> <div><BR><B><I>Matthias Felleisen <matthias@ccs.neu.edu></I></B> wrote:</div> <BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid"><BR> <DIV>On Mar 25, 2008, at 1:48 PM, Cooke Kelsey wrote: <BLOCKQUOTE type="cite"> <DIV><SPAN
class=Apple-style-span style="-webkit-text-stroke-width: -1">I am trying to learn HtDP by myself, and like Dave Yrueta I am stumped by 12.4.2. </SPAN></DIV></BLOCKQUOTE> <DIV><BR></DIV>[Oops I forgot to reply to his last message.]<BR><BR><BR> <BLOCKQUOTE type="cite"> <DIV><SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">; Purpose: to insert a symbol between every letter of every word, e.g. X, AT-->XAT, AXT, ATX.</SPAN></DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>Please reformulate the example in terms of symbols and lists. </DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV> <SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">;Function Template: </SPAN></DIV> <DIV>(define (insert-everywhere/in-all-words s low)<BR> (cond<BR> [(empty? (rest low))...]<BR> [else ...(first low)...insert-everywhere/in-all-words s (rest low)]))<BR></DIV> <DIV>Note: </DIV> <DIV>It is
suggested to use "append", which is easy one or two times---(append x word) or (append (append (first word) x) (rest word))----but I can't see how to use this recursively for an arbitrary number of letters and words. </DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>So far so good. Let's try what HtDP/2e will introduce: </DIV> <DIV><BR></DIV> <DIV>Please make a table of the following shape: </DIV> <DIV><BR></DIV> <DIV> s | low | (first low) | (insert-everywhere/in-all-words s (rest low) | expected result for (insert-... s low)</DIV> <DIV>--------------------------------------------------------------------------------------------------------</DIV> <DIV> X | AT | ? | use the purpose statement to determine this | (list `XAT' `AXT' `ATX')</DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV>As I said, you need to
reformulate this in terms of symbols and lists. If it doesn't jump out at you how to go from the four columns to the last one, then make a couple of more examples. I am pretty sure it will. Here is the rule of thumb: </DIV> <DIV><BR></DIV> <DIV> --> you know of a built-in function/primitive that does the work </DIV> <DIV> --> you don't. in this case, you make a wish: a purpose statement and a contract for a helper function that does it for you. </DIV> <DIV><BR></DIV> <DIV>You may also have to combine a primitives with functions. </DIV> <DIV><BR></DIV> <DIV>Please report back -- Matthias</DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV></DIV> <DIV> </DIV> <DIV>The fact that the "hint" refers to the keyword list, which the book hasn't covered yet, makes me wonder if it's even possible to answer this problem, given what we know
so far...</DIV> <DIV> </DIV> <DIV>Thanks very much, </DIV> <DIV> </DIV> <DIV>Cooke</DIV> <DIV><BR class=khtml-block-placeholder></DIV> <HR SIZE=1> Looking for last minute shopping deals? <A href="http://us.rd.yahoo.com/evt=51734/*http://tools.search.yahoo.com/newsearch/category.php?category=shopping">Find them fast with Yahoo! Search.</A> <DIV style="MARGIN: 0px">_________________________________________________</DIV> <DIV style="MARGIN: 0px"><SPAN class=Apple-converted-space> </SPAN>For list-related administrative tasks:</DIV> <DIV style="MARGIN: 0px"><SPAN class=Apple-converted-space> </SPAN><A href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</A></DIV></BLOCKQUOTE></DIV><BR></BLOCKQUOTE><BR><p> 
<hr size=1>Looking for last minute shopping deals? <a href="http://us.rd.yahoo.com/evt=51734/*http://tools.search.yahoo.com/newsearch/category.php?category=shopping">
Find them fast with Yahoo! Search.</a>