<div>[Moving the thread to the users mailing list]</div><div><br></div><div>Yingjian,</div><div><br></div><div>Good to see you persevering and getting it done! Congratulations.</div>
<div><br></div><div>Before I reasoned about your code, just looking at its shape was enough to imagine it was not properly indented.</div><div>You can use and abuse of DrRacket for your on good.</div><div><br></div>
<div>Using the shortcut <font face="&#39;courier new&#39;, monospace">CTRL+I</font> let&#39;s you reindent all of your code, which gives this:</div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#lang racket</font></div>


<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">(define (count-matches s l)  </font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  (define (addone s l x)</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    (cond</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      [(empty? l) x]</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      [(equal? s (first l)) (addone s (rest l) (+ 1 x))]</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      [else (addone s (rest l) x)]))</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  (addone s l 0))</font></div></div><div><br></div><div><br></div><div>The change in indentation makes clear that you&#39;re defining an auxiliary function and the result of calling count-matches is that of calling (addone s l 0).</div>


<div><br></div><div>BTW &quot;addone&quot; doesn&#39;t really sound to me to describe what the function is doing -- it not always &quot;adds one&quot;.</div><div>
<br></div><div><br></div><div>Look how a similar implementation is possible without an inner auxiliary function:</div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">#lang racket</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">(define (count-matches s l)  </font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  (cond</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">
    [(empty? l) 0]</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    [(equal? s (first l)) (add1 (count-matches s (rest l)))]</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    [else (count-matches s (rest l))]))</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">(count-matches &#39;x &#39;())      ;   should be 0</font></div>


<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">(count-matches &#39;x &#39;(a b x)) ;   should be 1</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">(count-matches &#39;x &#39;(x b x)) ;   should be 2</font></div>

</div><div><br></div><div><br></div><div>[]&#39;s</div><br clear="all">Rodolfo Carvalho<br>
<br><br><div class="gmail_quote">On Wed, Jun 1, 2011 at 01:37, Yingjian Ma <span dir="ltr">&lt;<a href="mailto:yingjian.ma1955@gmail.com" target="_blank">yingjian.ma1955@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>I finished it.  The purpose of the function is to count the occurrance of a letter in a list.  Ex:</div>
<div> </div>
<div>(count-matches &#39;x &#39;())   should be 0</div>
<div>(count-matches &#39;x &#39;(a b x))   should be 1  </div>
<div>(count-matches &#39;x &#39;(x b x))   should be 2                 </div>
<div> </div>
<div>The keywords I can use are limited.   Thank you all for the help.  Another I need to write is to remove duplicated items from the list.</div>
<div> </div>
<div>It seems that under cond, one condition can only take one expression.  What can I do if I want to do two statements?</div>
<div> </div>
<div>Here is the code. </div>
<div> </div>
<div><div>(define (count-matches s l)  <br></div>  (define (addone s l x)<br>     (cond<br>     [(empty? l) x]<br>     [(equal? s (first l)) (addone s (rest l) (+ 1 x))]<br>     [else (addone s (rest l) x)]))<br>
     (addone s l 0))</div><div><div></div><div>

<div> </div>
<div> </div></div></div></blockquote></div>