Hi Todd &amp; Marco -- <br><br>Thank you both for responding. <br><br>Perhaps my problem lies with my understanding of contracts?&nbsp; Here&#39;s what I have so far....<br>
<br>;contract for fold<br>;(X X &gt; X) X (listof X) &gt; X<br><br>;contract for abstract-from-sum and abstract-from-product<br>;(number number &gt; number) number (listof numbers) &gt; number<br><br>;contract for append<br>



;lst lst &gt; lst<br><br>;contract for append-from-fold<br>;(lst lst &gt; lst) lst lst &gt; lst<br><br>;contract for map<br>;(X &gt; Y) (listof X) &gt; (listof Y)<br><br>I feel my understanding is running aground on two counts.&nbsp; First, it appears to me that my contract for append--<br>
<br>;contract for &#39;append<br>;(lst lst &gt; lst) lst lst &gt; lst<br>
<br>--does not &quot;map&quot; onto my contract for &#39;fold --<br><br>;contract for &#39;fold<br>;(X X &gt; X) X (listof X) &gt; X<br><br>After substituting &#39;append&#39;s &#39;lst parameter for all instances of X in &#39;fold, &#39;fold&#39;s third parameter becomes (listof lst).&nbsp; That can&#39;t be right?&nbsp; Is this where I&#39;m floundering?<br>



<br>Second, I&#39;m not sure how to resolve the discrepancy between the argument requirements for the function parameters in &#39;fold and &#39;map.&nbsp; &#39;Fold&#39;s function parameter requires two like arguments, and converts them into a like value (X X &gt; X); &#39;map&#39;s function parameter requires only one argument, and coverts it into a different type of value (X &gt; Y).&nbsp; So it would seem that the designer of map-from-fold is constrained by the structure of &#39;fold to make &#39;cons the argument for the function parameter, since it the only function that accepts two arguments and outputs a list. The final value of any list must be an empty list, so it seem that limits &#39;threshold&#39;s value to &#39;empty.&nbsp; The only parameter left is the list argument, and I suppose that&#39;s where the list from map goes. So the result is this....<br>


<br>(define(map f lox)<br>&nbsp;&nbsp; (fold cons empty lox))<br><br>... which simply outputs &#39;map&#39;s list parameter, returning me to square 1, and leaving &#39;f unused. <br><br>The only other thing I can think of is to take up Todd&#39;s suggestion, and start off &#39;map by applying &#39;f directly to (first lox) --<br>

<br>(define(map f lox)<br>&nbsp;&nbsp; (f((first lox).....<br><br>--&#39;cons-ing that onto the front of a list <br><br>(define(map f lox)<br>
&nbsp;&nbsp; (cons(f((first lox)....<br><br>-- and then introducing &#39;fold in the manner above, with one change: making &#39;(map f (rest lox)) the argument for &#39;fold&#39;s third parameter, since we know &#39;map, according to its&#39; contract, is supposed to produce a list. <br>

<br>Hmm, that seems to work as long as the first conditional clause answers to &#39;empty:<br><br>(define(mapp2 f lox)<br>&nbsp; (cond<br>&nbsp;&nbsp;&nbsp; [(empty? lox)empty]<br>&nbsp;&nbsp;&nbsp; [else(cons(f(first lox))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (fold cons empty (mapp2 f (rest lox))))]))<br>

<br>(Sorry about the discursive prose. Writing this stuff out helps me work thru the problem-solving process....)<br><br>Could this be the solution sought after by HtDP?&nbsp; If so, it seems to me like a <i>much</i> more complicated version of the original &#39;map, or an instance of spending dollars to save pennies......<br>

<br>At any rate, your thoughts and suggestions are very much appreciated, especially since I&#39;m trying to work thru HtDP on my own with assistance only from the members of plt-scheme.<br>
<br>Many thanks, <br>Dave Yrueta<br> <br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><div class="gmail_quote">On Mon, Jul 7, 2008 at 4:04 PM, Marco Morazan &lt;<a href="mailto:morazanm@gmail.com" target="_blank">morazanm@gmail.com</a>&gt; wrote:<br>


<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>On Mon, Jul 7, 2008 at 6:11 PM, dave yrueta &lt;<a href="mailto:dyrueta@gmail.com" target="_blank">dyrueta@gmail.com</a>&gt; wrote:<br>
&gt;<br>
</div><div>&gt; (define(fold f th lox)<br>
&gt; &nbsp;(cond<br>
&gt; &nbsp; &nbsp;[(empty? lox)th]<br>
&gt; &nbsp; &nbsp;[else<br>
&gt; &nbsp; &nbsp; (f (first lox)<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp;(fold f th (rest lox)))]))<br>
&gt;<br>
<br>
</div>What is the contract for fold?<br>
<div><br>
&gt;<br>
&gt; (define(mapp2 f lox)<br>
&gt; &nbsp;(fold (cons f) empty lox))<br>
&gt;<br>
&gt; This won&#39;t work, because (cons f) is not a legitimate expression. &nbsp;I<br>
&gt; started work on next problem in the meantime, and that seems even more<br>
&gt; puzzling, so I feel like there is some basic concept about abstraction<br>
&gt; that I&#39;m not getting. &nbsp;Any suggestions?<br>
&gt;<br>
<br>
</div>Here&#39;s where a contract is going to be useful for you. What does fold<br>
expect as arguments? Certainly, (cons f) is not something fold is<br>
expecting as its first argument.<br>
<br>
Cheers,<br>
<font color="#888888"><br>
Marco<br>
</font></blockquote></div><br>