I love it!<div><br></div><div>Ron Paul Middle school, 2024, Ms. Anderson&#39;s 5th grade:</div><div><br></div><div>&quot;But Teacher, when I ran &#39;StyleNazi&#39; like you told us to, it just came back with:</div><div>   &#39;here&#39;s a phone card, call your mother...&#39; &quot;</div>
<div><br></div><div>-Joe<br><br><div class="gmail_quote">On Sun, Feb 19, 2012 at 6:10 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
20 minutes ago, Rodolfo Carvalho wrote:<br>
&gt; It is possible to replace a pattern like this:<br>
&gt;<br>
&gt; (cond<br>
&gt;    [..a..]<br>
&gt;    [else (cond<br>
&gt;                [..b..]<br>
&gt;                ...)])<br>
&gt;<br>
&gt; With this simpler:<br>
&gt;<br>
&gt; (cond<br>
&gt;    [..a..]<br>
&gt;    [..b..]<br>
&gt;     ...)<br>
<br>
Speaking about such transformations and about things like (if E #t #f),<br>
I have some code which I run against student submissions to find style<br>
problems like these, and using syntax transformations means that it&#39;s<br>
easy to make it actually suggest the transformation.  For example,<br>
feeding it this code:<br>
<br>
  (define (foo x y)<br>
    (cond [(&lt; x y)<br>
           (printf &quot;~s is smaller than ~s\n&quot; x<br>
                   y)]<br>
          [else (cond [(&gt; x y) (printf &quot;~s is bigger than ~s&quot; x<br>
                                       y)]<br>
                      [else (printf &quot;They are ~a\n&quot;<br>
                                    (if (if (eq? x y) #f #t)<br>
                                        &quot;identical&quot;<br>
                                    &quot;equal&quot;))])]))<br>
<br>
produces this annotated printout:<br>
<br>
  (define (foo x y)<br>
    (cond [(&lt; x y)<br>
           (printf &quot;~s is smaller than ~s\n&quot; x<br>
  ;;&gt;                                        A<br>
  ;;&gt; (A) this expression (and the rest) should be on a separate line (or<br>
  ;;&gt;     make the whole `printf&#39; fit on one line)<br>
                   y)]<br>
          [else (cond [(&gt; x y) (printf &quot;~s is bigger than ~s&quot; x<br>
  ;;&gt;           A              B<br>
  ;;&gt; (A) flatten this into the surrounding `cond&#39;<br>
  ;;&gt; (B) make this form fit on one line, or put it on a separate line<br>
                                       y)]<br>
                      [else (printf &quot;They are ~a\n&quot;<br>
                                    (if (if (eq? x y) #f #t)<br>
  ;;&gt;                                   A<br>
  ;;&gt; (A) `if&#39; not needed, just use (not (eq? x y))<br>
                                        &quot;identical&quot;<br>
                                    &quot;equal&quot;))])]))<br>
  ;;&gt;                               A<br>
  ;;&gt; (A) misleading &quot;flat&quot; indentation<br>
<br>
Actually, there&#39;s a few more things it prints -- it&#39;s not intended to<br>
be used without a human going over its output.  In case someone is<br>
interested in such a project I can send out the code.  It could even<br>
make a cute drracket tool that criticizes your code...<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</font></span></blockquote></div><br></div>