<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi<div><br></div><div>I don't think there is a reasonable objection to forbid a form like<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span><font class="Apple-style-span" face="'Courier New'">((returns-something-funcallable arg1 arg2 ... argN) 1 2 3 ... N)</font></div><div><br></div><div>from "working as expected".  As Martin pointed out, if the return value of the form is a "macro" then this would have to be interpreted in the "regular" evaluation regime.</div><div><br></div><div>As per "extending" LET there have been a lot of proposals... IMHO a nice one is to go the LOOP way :)</div><div><br></div><div>(<font class="Apple-style-span" face="'Courier New'">LETS [var <symbol> <form>]*</font></div><div><font class="Apple-style-span" face="'Courier New'"></font><span class="Apple-style-span" style="font-family: 'Courier New'; ">      [fun (<name> <arglist> <body>)]*</span></div><div><font class="Apple-style-span" face="'Courier New'">      [labels (<name> <arglist> <body>)]*</font></div><div><font class="Apple-style-span" face="'Courier New'">      [values <list> <form>]*</font></div><div><span class="Apple-style-span" style="font-family: 'Courier New'; ">  IN</span></div><div><font class="Apple-style-span" face="'Courier New'">  <body>)</font></div><div><br></div><div>Of course you can add some ways of extending the syntax by having something like</div><div><br></div><div><font class="Apple-style-span" face="'Courier New'">(def-lets-binding <tag> ...)</font></div><div><br></div><div>You get the idea....</div><div><br></div><div>Cheers</div><div>--</div><div>MA</div><div><br></div><div><br></div><div><br><div><div>On May 25, 2011, at 17:51 , Matthew Swank wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Alessio Stalla <alessiostalla@...> writes:<br><br><blockquote type="cite"><br></blockquote><blockquote type="cite">On Wed, May 25, 2011 at 4:45 PM, Matthew Swank<br></blockquote><blockquote type="cite"><akopa.gmane.poster@...> wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Pascal Costanza <pc@...> writes:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">On 25 May 2011, at 04:51, Matthew D. Swank wrote:<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">However, consider the following:<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">((returns-a-function) arg arg ...)<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Would it be reasonable to allow this as a legal form as well?<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">While in principle I like such a thing, I think it doesn't play well<br></blockquote><blockquote type="cite">with Lisp-2 (or more specifically, with Common Lisp). If ((whatever)<br></blockquote><blockquote type="cite">...) is a valid expression, then one would expect (let ((foo<br></blockquote><blockquote type="cite">(whatever))) (foo ...)) to be equivalent, but it's not. And you can't<br></blockquote><blockquote type="cite">use flet/labels for the same effect. <br></blockquote><br>Well, let bindings could be extended to use an operator to specify the namespace:<br><br>(let (((function foo) (lambda (arg ...) ...))<br>      (bar  (lambda (arg ...) ...)))<br>  (foo ...)<br>  (funcall bar ...))<br><br><br>and flet/labels would transform into a generalized let binding.<br><br>This would make the standard transformation of let -> function call a little<br>problematic, however.<br><br>I suppose at the bottom of all this is an implied primitive binding operator for<br>operators: perhaps flambda!<br><br>Matt<br><br><br><br>_______________________________________________<br>pro mailing list<br><a href="mailto:pro@common-lisp.net">pro@common-lisp.net</a><br>http://lists.common-lisp.net/cgi-bin/mailman/listinfo/pro<br></div></blockquote></div><br><div apple-content-edited="true">--<br>Marco Antoniotti, Associate Professor<span class="Apple-tab-span" style="white-space:pre">                            </span>tel.<span class="Apple-tab-span" style="white-space:pre">        </span>+39 - 02 64 48 79 01<br>DISCo, Università Milano Bicocca U14 2043<span class="Apple-tab-span" style="white-space:pre">             </span><a href="http://bimib.disco.unimib.it">http://bimib.disco.unimib.it</a><br>Viale Sarca 336<br>I-20126 Milan (MI) ITALY<br><br>Please note that I am not checking my Spam-box anymore.<br>Please do not forward this email without asking me first.<br><br><br><br><br></div><br></div></div></body></html>