<div class="gmail_quote">On Sat, Sep 10, 2011 at 8:39 AM, Stephen J. Turnbull <span dir="ltr"><<a href="mailto:stephen@xemacs.org">stephen@xemacs.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">H Krishnan writes:<br>
<br>
 > In my 10+ years in scheme, I have never used 'define' as a symbol,<br>
<br>
</div>Of course you have used 'define' as a symbol.  The rules of expression<br>
evaluation in Scheme say "evaluate the first element of a list, and<br>
apply the result to the rest of the list as arguments."  When 'define'<br>
is the first element of a list, it is evaluated as a symbol, ie, the<br>
content of the value cell of the symbol 'define' is retrieved.<br>
Conventionally, that cell contains a function that sets the value<br>
of the second argument to the value of the third argument.<br>
<br>
You can't really get away with saying, "I haven't used it as a<br>
variable", either, since taking the value of a symbol is using it as a<br>
variable.<br>
<br>
So the design of Scheme (and Lisps in general) is very elegant,<br>
because everything is determined by the arrangement of parentheses.<br>
There is no need for reserving keywords.  However, not all languages<br>
are Lisps.  Vive la difference![1]<br>
<br>
Except that as somebody pointed out, there is a need.  It turns out<br>
that users want keywords in the form of "constants that evaluate to<br>
themselves".  So in the end you're at the same place, just a different<br>
balance.  (I know that Scheme does not have them, although they can be<br>
created using define -- that's Schemingly correct, of course.  But<br>
other languages have made a deliberate choice to introduce them, cf.<br>
<a href="http://stackoverflow.com/questions/1527548/why-does-clojure-have-keywords-in-addition-to-symbols" target="_blank">http://stackoverflow.com/questions/1527548/why-does-clojure-have-keywords-in-addition-to-symbols</a>.)<br>

<div class="im"><br>
 > If syntax highlighting tools can use python's ast and other modules<br>
 > to identify keywords (instead of using their own parsers), the<br>
 > domino effect will be lesser.<br>
<br>
</div>They can't.  Think editors written in Lisp.<br>
<br>
<br>
Footnotes:<br>
[1]  With apologies to the Francophones present for my spelling.<br>
<br>
</blockquote></div>Thanks to the python community, I have learnt a lot in these mail exchanges. <div><br></div><div>I didn't realize that my proposal was not backward compatible. As some of you pointed out, currently, "return (val)" and "yield (val)" are legal python with 'return' and 'yield' used as keywords. So, I'll withdraw my proposal.</div>
<div><br></div><div>I did want to reply to a few specific comments (e.g. 'python parser is simple') but I don't subscribe to the mailing list and didn't want to break the threading in the list.</div><div><br>
</div><div>Thanks,</div><div>Krishnan</div>