<DIV>(1) At this point it becomes critical to spell out the (list ...) stuff, i.e., to turn the example into full-fledged Scheme data. Small step. </DIV> <DIV> </DIV> <DIV>OK, here it is:</DIV> <DIV> </DIV> <DIV>; Example: (define (insert-in-single-word 'X (list 'A 'T). </DIV> <DIV>Result should be (list (list 'X 'A 'T) (list 'A 'X 'T) (list 'A 'T 'X))</DIV> <DIV> </DIV> <DIV>(.......which Scheme displays as (cons (cons 'X (cons 'A (cons 'T empty))) (cons (cons 'A (cons 'X (cons 'T empty))) (cons (cons 'A (cons 'T (cons 'X empty))) empty)))....)</DIV> <DIV> </DIV> <DIV>(2) I propose you make a second example again. </DIV> <DIV> </DIV> <DIV> <DIV>;Example 2: (define (insert-in-single-word 'X (list 'Y). </DIV> <DIV>Result should be (list (list 'X 'Y) (list 'Y 'X))</DIV> <DIV> </DIV> <DIV> <DIV>(3) This is NOT a template. </DIV> <DIV> </DIV> <DIV>Yikes, my bad. Here's the
proper template:</DIV> <DIV> </DIV> <DIV>; Template: <BR>; (define (insert-in-single-word s word)<BR>; (cond<BR>; [(empty? (rest word)) empty]<BR>; [else .....(first word)......(insert-in-single-word s (rest word)))]))</DIV> <DIV> </DIV> <DIV>(4) And before you complete the template build a table just like the one above for the recursive case. </DIV> <DIV> </DIV> <DIV> <DIV>First Table: </DIV> <DIV> </DIV> <DIV> s | word | (first word) | (insert-in-single-word s (rest word)) | expected result for (insert-... s low)</DIV> <DIV>--------------------------------------------------------------------------------------------------------</DIV> <DIV> 'X |(list 'A 'T)| 'A
| (insert-in-single-word s (list 'T) | (list (list 'X 'A 'T) (list 'A 'X 'T) (list 'A 'T 'X))</DIV> <DIV> </DIV> <DIV>Table for Recursive Case:</DIV> <DIV> </DIV> <DIV> <DIV> s | word | (first word) | (insert-in-single-word s (rest word)) | expected result for (insert-... s low)</DIV> <DIV>--------------------------------------------------------------------------------------------------------</DIV> <DIV> 'X |(list 'T)| 'T | (insert-in-single-word s empty | (list (list 'X 'T) (list 'T 'X))</DIV></DIV> <DIV> </DIV> <DIV>I feel I am getting closer to the answer. The second table suggest to me that there is something about recurring down to 2 letters and then appending the rest on.....except that I lost the rest of the letters.
</DIV> <DIV> </DIV> <DIV>The only way I can visualize it is like file cabinets, and I use a counting function to count all the letters and assigning them to little files or numbered variables and then increment the value of the input variable in between each one. </DIV> <DIV> </DIV> <DIV>I know that is ridiculous but that is what comes to mind.</DIV></DIV></DIV></DIV> <DIV><BR><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 27, 2008, at 2:12 PM, Cooke Kelsey wrote:<BR class=Apple-interchange-newline> <BLOCKQUOTE type="cite"> <DIV>Here's the answers to your questions:</DIV> <DIV> </DIV> <DIV>Q: What do you mean with (rest ..) ? This doesn't look like my table. </DIV> <DIV> </DIV> <DIV> A: Your table says, "(insert-everywhere/in-all-words s (rest low)," which means I
would rewrite the whole function in the column? </DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>I want to know what the result of (insert-everywhere/in-all-words s (rest low)) would be when low = ... </DIV> <DIV>(Looking more closely, your second row says you did the right thing.) </DIV> <DIV><BR></DIV> <DIV><BR></DIV> <BLOCKQUOTE type="cite"> <DIV> <SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">[This isn't quite right! 'AT is NOT the representation of the English word "at".]</SPAN></DIV> <DIV> </DIV> <DIV> A: I was trying to use shorthand from Intermezzo 2:</DIV><PRE class=schemeresponse><SPAN class=keyword>'</SPAN>(<SPAN class=variable>a</SPAN> <SPAN class=variable>b</SPAN> <SPAN class=variable>c</SPAN>) <SPAN class=comment>This short-hand is an abbreviation for</SPAN> (<SPAN class=builtin>list</SPAN> <SPAN class=keyword>'</SPAN><SPAN class=variable>a</SPAN> <SPAN class=keyword>'</SPAN><SPAN
class=variable>b</SPAN> <SPAN class=keyword>'</SPAN><SPAN class=variable>c</SPAN>) </PRE></BLOCKQUOTE> <DIV><BR></DIV> <DIV>Then what is '(AT)? Hint: you used ' improperly, and that is common for beginners. I recommend you stick to (list 'a 'b 'c) and (list (list 'a) (list 't)) and so on. </DIV> <DIV><BR></DIV> <DIV><BR></DIV> <BLOCKQUOTE type="cite"> <DIV> <SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">Q: Why not take one step from row 1, which uses a list with one word. What would be the next case? </SPAN></DIV> <DIV> </DIV> <DIV>A: Um, two words. I have no idea why I did that.</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>Make up a simpler example. Simple examples are good. </DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV><SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">Q: The second leap went wrong. Why? Is it possible that you JUMPED? Why don't you turn the above examples
into examples for this function. And *please* do provide a contract, a purpose statement. </SPAN></DIV> <DIV> </DIV> <DIV>A: OK, this is where my big problem is. I'm not sure what you mean by JUMPED. Can you be more specific? I realize this is some kind of clue but I am too slow to get it. </DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>JUMPED means you wrote the helper function w/o contract, purpose statement, template, examples. </DIV> <DIV><BR></DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV></DIV> <DIV> <SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">Here's a full design recipe:</SPAN></DIV> <DIV> </DIV> <DIV>; Purpose: to insert a symbol between every letter of a single word<BR>; Contract: symbol word --> list of words<BR>; Example: (define (insert-in-single-word X AT). Result should be (XAT AXT ATX)</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>(0) The example is _conceptually_
correct (meaning at the information level). </DIV> <DIV><BR></DIV> <DIV>(1) At this point it becomes critical to spell out the (list ...) stuff, i.e., to turn the example into full-fledged Scheme data. Small step. </DIV> <DIV>(2) I propose you make a second example again. </DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV>; Template: <BR>; (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)))]))</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>This is NOT a template. </DIV> <DIV><BR></DIV> <DIV>And before you complete the template build a table just like the one above for the recursive case. </DIV> <DIV><BR></DIV> <DIV>-- Matthias</DIV> <DIV><BR></DIV> <DIV><BR></DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE
type="cite"> <DIV><BR></DIV> <DIV>Thanks very much.<BR><BR><B><I>Matthias Felleisen <<A href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</A>></I></B> wrote:</DIV> <BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid"><BR> <DIV>On Mar 27, 2008, at 1:20 PM, Cooke Kelsey wrote:<BR class=Apple-interchange-newline> <BLOCKQUOTE type="cite"> <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</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>Q: What do you mean with (rest ..) ? This doesn't look like my table. </DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite">
<DIV>;--------------------------------------------------------------------------------------------------------<BR>; X | '(AT) |'(AT) |empty | '((XAT) (AXT) (ATX))</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV><BR></DIV> <DIV>[This isn't quite right! 'AT is NOT the representation of the English word "at".]</DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV>; X | '((AB) (CD) (EF))|'(AB) |'((CD) (EF))| '((XAB) (AXB) (ABX) (XCD) (CXD) (CDX) (XEF) (EXF) (EFX))</DIV></BLOCKQUOTE> <DIV><BR></DIV>This second row looks hyper-complicated. </DIV> <DIV><BR></DIV> <DIV>Q: Why not take one step from row 1, which uses a list with one word. What would be the next case? </DIV> <DIV><BR></DIV> <DIV> <DIV><BR></DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV><SPAN class=Apple-style-span style="-webkit-text-stroke-width:
-1">Here's an attempt to "go from the first columns to the last": </SPAN></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></BLOCKQUOTE> <DIV><BR></DIV> <DIV>Good the first leap went fine. </DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV> <SPAN class=Apple-style-span style="-webkit-text-stroke-width: -1">(define (insert-in-single-word s word)</SPAN></DIV> <DIV> (cond<BR> [(empty? (rest word)) empty]<BR> [else (append (list (first word) s (rest word)) (insert-in-single-word s (rest word)))]))</DIV></BLOCKQUOTE> <DIV><BR></DIV> <DIV>The second leap went wrong. Why? </DIV> <DIV><BR></DIV> <DIV>Is it possible that you JUMPED? Why don't you turn the above examples into
examples for this function. And *please* do provide a contract, a purpose statement. </DIV> <DIV><BR></DIV> <DIV>-- Matthias</DIV> <DIV><BR></DIV> <DIV><BR></DIV><BR> <BLOCKQUOTE type="cite"> <DIV><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 <<A href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</A>></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> <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></BLOCKQUOTE></DIV><BR></BLOCKQUOTE><BR> <DIV><BR class=khtml-block-placeholder></DIV> <HR SIZE=1> Never
miss a thing. <A href="http://us.rd.yahoo.com/evt=51438/*http://www.yahoo.com/r/hs">Make Yahoo your homepage.</A></BLOCKQUOTE></DIV><BR></BLOCKQUOTE><BR><p> 
<hr size=1>Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. <a href="http://us.rd.yahoo.com/evt=51733/*http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ "> Try it now.</a>