<DIV> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Hi, I just want to thank Marco, Mark, Dave, and especially Matthias for helping me out.<SPAN style="mso-spacerun: yes"> </SPAN>I can’t believe how patient you were.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>In case you encounter another hard-headed student like me, the following is what I was thinking when you were trying to help me, and how I finally figured it out.<SPAN style="mso-spacerun: yes"> </SPAN>I hope I don’t offend anyone.<SPAN style="mso-spacerun: yes"> </SPAN>It’s not pretty, but this is what it is like for someone who really doesn’t have a clue…..</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri
size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>-------------------------</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: <SPAN style="mso-spacerun: yes"> </SPAN>Hi, I am stumped by 12.4.2….</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="mso-spacerun: yes"><FONT face=Calibri size=3></FONT></SPAN> </div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Let's try what HtDP/2e will introduce: Please make a table….</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: OK, inputs and outputs.<SPAN style="mso-spacerun: yes"> </SPAN>Huh?<SPAN style="mso-spacerun: yes"> </SPAN>What is this 4<SUP>th</SUP> column: <I style="mso-bidi-font-style:
normal">Result of Recursion (rest word)</I>?!<SPAN style="mso-spacerun: yes"> </SPAN>Where in the world did this come from?! ….Whatever, forget the table, I’ll just copy the template….AHA!<SPAN style="mso-spacerun: yes"> </SPAN>I need to write a main function for “all words” and a helper for “single word.”</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Good the first leap went fine.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me:<SPAN style="mso-spacerun: yes"> </SPAN>Awesome.<SPAN style="mso-spacerun: yes"> </SPAN>Now, I need another function.<SPAN style="mso-spacerun: yes"> </SPAN>How to get that stupid “x” to move over, without losing
first letters…</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Why don't you make examples for this <SPAN style="mso-spacerun: yes"> </SPAN>function. And *please* do provide a contract, a purpose statement.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Yeah yeah, he wants me do that whole “recipe” thing, and make another table.<SPAN style="mso-spacerun: yes"> </SPAN>Where is this heading….</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Matthias:<SPAN style="mso-spacerun: yes"> </SPAN>Spell out the
(list…) elements.<SPAN style="mso-spacerun: yes"> </SPAN>Make a second example again.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: <SPAN style="mso-spacerun: yes"> </SPAN>(groan) What is the point of writing out all these letters for an example?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: You need to actually determine the VALUE of these expressions<SPAN style="mso-spacerun: yes"> </SPAN>not just write down the expressions to make the leap.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal
style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: OK, OK!<SPAN style="mso-spacerun: yes"> </SPAN>I see letters in one column, letters in another.<SPAN style="mso-spacerun: yes"> </SPAN>Is something magical supposed to happen by looking at this?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Matthias: (sees my tables) This is huge progress.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: <SPAN style="mso-spacerun: yes"> </SPAN>??</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in
0pt"><FONT face=Calibri size=3>Matthias:<SPAN style="mso-spacerun: yes"> </SPAN>You’re almost there! And don't forget: if the leap is to large, you may need yet another<SPAN style="mso-spacerun: yes"> </SPAN>helper function.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Helper function, hmmmm….. I already know I need “help”--I need a function to get back those stupid missing letters!</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Think about how the words you get back from the recursion go into the final result.<SPAN style="mso-spacerun: yes"> </SPAN>Don't try to code it up. Try to think it through first and come up with a description of WHAT has
to happen to combine all these values<SPAN style="mso-spacerun: yes"> </SPAN>properly. THEN turn this into a function with the design recipe.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me:<SPAN style="mso-spacerun: yes"> </SPAN>So what does he want me to do?<SPAN style="mso-spacerun: yes"> </SPAN>He says I’m not allowed to test out functions, all I can do is look at this stupid table.<SPAN style="mso-spacerun: yes"> </SPAN>Speak to me, table!</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>(I stay up all night drawing tables on paper, with arrows in between the different letters, input and output).</FONT></div> <div class=MsoNormal style="MARGIN: 0in
0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: <SPAN style="mso-spacerun: yes"> </SPAN>It seems to require a sort of REGISTER [let register = x] to save the current (first words), <SPAN style="mso-spacerun: yes"> </SPAN>which I then append to shrinking (rest word).<SPAN style="mso-spacerun: yes"> </SPAN>I thought of your reminder to use helper functions, e.g. "add-prefix," but I keep going back to this register idea.<SPAN style="mso-spacerun: yes"> </SPAN>I don't know whether I am getting off track or what.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: "Register" sounds like an old man's way of thinking about machines and lower-level representations of computations yet. But add-prefix seems
definitely related to the "it's missing the letter ..." part.<SPAN style="mso-spacerun: yes"> </SPAN>Where should this missing letter get added? Correct! At the beginning.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Me: It's not possible to add missing letters...they are missing!<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>(I spend more hours trying to write “add-prefix” expressions, helper functions, none of them work.<SPAN style="mso-spacerun: yes"> </SPAN>None of them are recursive.<SPAN style="mso-spacerun: yes"> </SPAN>It never occurs to me that the program would require putting the recursive
main function inside ANOTHER recursive function).</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: X = (list 'X 'T) and 'A --> I want (list 'A 'X 'T). How do I do that?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Oh God, is this what all these hours amount to?<SPAN style="mso-spacerun: yes"> </SPAN>I just append a stupid ‘A on to it.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Dave Yrueta: You're so close!<SPAN style="mso-spacerun: yes"> </SPAN>Up to this point in HtDP…functions examine the first
element of the list,</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>either save or discard it, and then recur.<SPAN style="mso-spacerun: yes"> </SPAN>So it seems natural that any list-processing function could only produce a list of symbols with a length either equal to or less than the original list.<SPAN style="mso-spacerun: yes"> </SPAN>So you're asking yourself, given a word, or a list-of-symbols with,for example, four-letters, how in the heck do I produce a list-of-words 5 words long, with each word the length of original word? </FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: YES!<SPAN style="mso-spacerun: yes"> </SPAN>At least someone understands how illogical this all is.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri
size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Dave Yrueta:<SPAN style="mso-spacerun: yes"> </SPAN>My advice is to pay extremely close attention to Matthias' last hint-- it is very telling: * X = (list 'X 'T) and 'A --> I want (list 'A 'X 'T). How do I do that?<SPAN style="mso-spacerun: yes"> </SPAN>Answer in the simplest and most natural terms you can come up with, sit it on it for awhile, and the answer may come to you.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Oh no!<SPAN style="mso-spacerun: yes"> </SPAN>Not again…. (I spend more hours drawing tables with arrows).</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in
0pt"><FONT face=Calibri size=3>Me: OK, Matthias and Marco: I realize that I need two functions: one that is shrinking and one that is growing.<SPAN style="mso-spacerun: yes"> </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>So I append them together: <SPAN style="mso-spacerun: yes"> </SPAN>(append (cons-function (word)) (shrinking-function 'X (word))).<SPAN style="mso-spacerun: yes"> </SPAN>What do I get?<SPAN style="mso-spacerun: yes"> </SPAN>Garbage.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: All I was getting at is a simple point:<SPAN style="mso-spacerun: yes"> </SPAN>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<SPAN style="mso-spacerun: yes"> </SPAN>words you have gotten back?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Me: (groan) YES, that is exactly what I am trying to do.<SPAN style="mso-spacerun: yes"> </SPAN>Why doesn’t anyone listen that I AM trying to make this mysterious function to add the letters back…..OK, I’m just going to write out a function, totally unrelated to the main one, that adds letters to a function.<SPAN style="mso-spacerun: yes"> </SPAN>( I write “add-first-letter”). …WHOA!<SPAN style="mso-spacerun: yes"> </SPAN>That was really weird.<SPAN style="mso-spacerun: yes"> </SPAN>Another whole recursive function.<SPAN style="mso-spacerun: yes"> </SPAN>How complicated!<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal
style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Matthias: <SPAN style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Courier New'">If you apply “add-first-letter” to (first word) and the result of (insert-everywhere/in-one-word (rest word)), you get back all but one of the word you want.<SPAN style="mso-spacerun: yes"> </SPAN>Which brings me to the second question:</SPAN> y</FONT><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'">ou failed to read and answer my second question.</SPAN></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Huh?<SPAN style="mso-spacerun: yes"> </SPAN>I thought I just
made a huge breakthrough.<SPAN style="mso-spacerun: yes"> </SPAN>I guess not.<SPAN style="mso-spacerun: yes"> </SPAN>Back to the drawing-boards.<SPAN style="mso-spacerun: yes"> </SPAN>What in the world is he asking: “What is missing?”<SPAN style="mso-spacerun: yes"> </SPAN>Well obviously, I’m missing all these first letters.<SPAN style="mso-spacerun: yes"> </SPAN>Even if I append on “add-first-letter” all I get is one letter.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Marco: Here is where I believe you are really stuck. All you need is to do something with (first a-word).<SPAN style="mso-spacerun: yes"> </SPAN>Where does it have to go in each of R?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal
style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: (groan) Yes, I know that I need to get those stupid first letters back.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Mark Engelberg: You keep talking about "shrinking lists"…That's not how the design of a recursive function works.<SPAN style="mso-spacerun: yes"> </SPAN>You're really just trying to figure out how to build *one level* from the level below.<SPAN style="mso-spacerun: yes"> </SPAN>In other words, when planning the function, you imagine that the recursive call works, and then figure out how to build the answer you desire from that piece.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal
style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Me: OK, OK, everything I’ve written is useless.<SPAN style="mso-spacerun: yes"> </SPAN>I’ll start over again from scratch.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Why did you throw away your progress (add-first-letter)?<SPAN style="mso-spacerun: yes"> </SPAN>I'll give you that much: with the two you are about 10 keystrokes<SPAN style="mso-spacerun: yes"> </SPAN>from the answer.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Me:<SPAN style="mso-spacerun: yes"> </SPAN>10 keystrokes???!<SPAN style="mso-spacerun: yes">
</SPAN>So I CAN use what I have already written, and I don’t need to draw any more stupid tables with arrows. <SPAN style="mso-spacerun: yes"> </SPAN>But what is he saying about “throwing away” add-first-letter—I must need to put that function in a different place.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Matthias: Let's step back a bit. 1. the design recipe works on a per function basis -- BUT YOU<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>NEED TO STICK TO IT; 2. that the 'wish list' works -- BUT YOU NEED TO STICK TO IT.<SPAN style="mso-spacerun: yes"> </SPAN>(If<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div
class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>you are systematic about this, you just never forget where in the problem you are.)</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Good advice.<SPAN style="mso-spacerun: yes"> </SPAN>I must be way off track.<SPAN style="mso-spacerun: yes"> </SPAN>(I rewrite the tables, make wish lists—“dear God give me a function to add the first letters incrementally!!!”)</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: Why did you not answer my second question, what is missing?</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div
class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Yeah, yeah, I know I am missing all of those letters, I’m having nightmares about them.<SPAN style="mso-spacerun: yes"> </SPAN>I need to add the first letters incrementally.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Matthias: NO! NO!<SPAN style="mso-spacerun: yes"> </SPAN>How can you add (the result of the recursion) to what you have so far? 10 keystrokes.<SPAN style="mso-spacerun: yes"> </SPAN>That's the question I raise.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: ?? I thought that’s what I just said, what I’ve been saying all along.</FONT></div> <div class=MsoNormal
style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri><FONT size=3>Marco: Ah! In the face of desperation you are abandoning your knowledge!!!<SPAN style="mso-spacerun: yes"> </SPAN>You are not using a template! <SPAN style="mso-spacerun: yes"> </SPAN>You have, for reasons I cannot fathom, abandoned the template…<TT><SPAN style="COLOR: black; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-ansi-font-size: 11.0pt; mso-bidi-font-size: 11.0pt"> </SPAN></TT></FONT><SPAN style="COLOR: black; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Courier New'"><FONT size=3>You seem to be trying to<o:p></o:p></FONT></SPAN></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="COLOR:
black; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Courier New'"><FONT size=3><FONT face=Calibri>fix something that is wrong instead of building correctly from the beginning.<SPAN style="mso-spacerun: yes"> </SPAN><o:p></o:p></FONT></FONT></SPAN></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN style="COLOR: black; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Courier New'"><o:p><FONT face=Calibri size=3> </FONT></o:p></SPAN></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Oh lord, what is he talking about.<SPAN style="mso-spacerun: yes"> </SPAN>I guess I have to start from scratch.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Marco:<SPAN style="mso-spacerun: yes"> </SPAN>Bigger hint: Do you want to add a
letter just to (rest a-word) or to all the possible words that you can form with (rest a-word)?<SPAN style="mso-spacerun: yes"> </SPAN>Notice that all other words will have (first a-word) as the first letter. That is easy to do using (add-letter-to-all<SPAN style="mso-spacerun: yes"> </SPAN><letter><list-of-words>). <SPAN style="mso-spacerun: yes"> </SPAN>Yes, you are practically there!!!</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Hmmm, he gave me code.<SPAN style="mso-spacerun: yes"> </SPAN>That must be a huge hint.<SPAN style="mso-spacerun: yes"> </SPAN>But still, it’s not like I can just put the whole main function inside “add-letter-to-all”….</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div
class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Mark Engleberg:</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Matthias’s table is where you were the closest.<SPAN style="mso-spacerun: yes"> </SPAN>In my opinion, you've been getting further off track since then.<SPAN style="mso-spacerun: yes"> </SPAN>You need to figure out how to put together the pieces in the first four columns, to get the thing in the final column.<SPAN style="mso-spacerun: yes"> </SPAN>Stay focused on that.<SPAN style="mso-spacerun: yes"> </SPAN>Matthias has given some strong hints, but perhaps some of his comments are also confusing you.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Me: Oh God, back to square
one again.<SPAN style="mso-spacerun: yes"> </SPAN>(One more night drawing tables.)</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>-----------------</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>Finally, this morning I opened up DrScheme and defined the function from scratch.<SPAN style="mso-spacerun: yes"> </SPAN>When I got to the recursive part, I remembered Marco’s code.<SPAN style="mso-spacerun: yes"> </SPAN>That recursive list is what I needed to add letters to, using add-letter-to-all.<SPAN style="mso-spacerun: yes"> </SPAN>It looked REALLY weird to me to put the recursive part inside another recursive function……..I clicked “Run”……..Oh my God, that’s
the answer!!!</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>Basically what happened was that I couldn’t imagine using a recursive function inside another recursive function.<SPAN style="mso-spacerun: yes"> </SPAN>It was totally unexpected to me when I tried it.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>I now realize that you were all pushing me to do that all along, but you see, I was still trying to visualize letters passing between functions, drawing arrows to show how to “get from column 1 to column 5.”<SPAN style="mso-spacerun: yes"> </SPAN>I thought that was the point of the table.<SPAN
style="mso-spacerun: yes"> </SPAN>Ultimately it looked like a map of the New York subway.<SPAN style="mso-spacerun: yes"> </SPAN>I nearly fried my brain trying to see the letters hop over from one column to the next.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT size=3><FONT face=Calibri>I’m glad that you all didn’t just tell me the answer.<SPAN style="mso-spacerun: yes"> </SPAN>This was a hurdle that I had to get through.<SPAN style="mso-spacerun: yes"> </SPAN>Honestly I don’t know how any of you could have explained it better.<SPAN style="mso-spacerun: yes"> </SPAN>It seems very tricky thing to teach someone without giving away the answer.<SPAN style="mso-spacerun: yes"> </SPAN></FONT></FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div>
<div class=MsoNormal style="MARGIN: 0in 0in 0pt"><FONT face=Calibri size=3>As a personal note, I have read many “Learn X in 24 hours” books that went in one ear and out the other, before HtDP.<SPAN style="mso-spacerun: yes"> </SPAN>On a web developer forum someone posted, “If you read HtDP and the MIT wizard book, you will know how to program better than anyone on this forum.”<SPAN style="mso-spacerun: yes"> </SPAN><SPAN style="mso-spacerun: yes"> </SPAN>As soon as I loaded up HtDP, it was like getting on a “learning rocket.”<SPAN style="mso-spacerun: yes"> </SPAN>Now I feel like I’ve been training with the Navy Seals.<SPAN style="mso-spacerun: yes"> </SPAN>Thanks again for all your patience.</FONT></div> <div class=MsoNormal style="MARGIN: 0in 0in 0pt"><o:p><FONT face=Calibri size=3> </FONT></o:p></div></DIV><p> 
<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>