[Sorry for the dup, Pascal.  Meant to send this to the whole list.]<br><div class="gmail_quote"><br><div class="im">On Fri, Nov 26, 2010 at 5:36 AM, Pascal Costanza <span dir="ltr"><<a href="mailto:pc@p-cos.net" target="_blank">pc@p-cos.net</a>></span> wrote:<br>
</div><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Did anybody see anything similar before? Any suggestions for improvement?<br></blockquote></div><div><br>My `bcond' macro, which works closely with my `nlet' macro, attempts to solve the same problem.  `nlet' subsumes `multiple-value-bind':<br>

<br>  (nlet ((a b (foo)))<br>     (bar a b))<br><br>Coming up with a good syntax for `bcond' wasn't easy, and I'm not sure what you'll think of my solution, but here it is.  It's like `cond', except that if the test subform is an `nlet' form, the scope of the bindings it establishes is magically extended to included the entire clause.  E.g.:<br>

<br>  (bcond ((nlet ((a b (foo)))<br>             (test a b))<br>          (do-something a b))<br>        ... more clauses ...)<br><br>The expansion is careful not to extend the scope of the bound variables over the following clauses.<br>

<br>These macros are in my "misc-extensions" project on <a href="http://common-lisp.net" target="_blank">common-lisp.net</a>, included in LibCL and Quicklisp.  As they are upward-compatible with `cl:let' and `cl:cond', the package provides the same macros under the names `let' and `cond', which can be shadowing-imported if desired (I use them this way).<br>

<br>`nlet' also subsumes and generalizes `let*'.<br><br>BTW I wrote these 30 years ago, in ZetaLisp.  I've always made heavy use of multiple values in my style, and `multiple-value-bind' is way too inconvenient to use -- the name is too long and it only takes one binding clause at a time.<br>

<br>-- Scott<br><br></div></div>
</div><br>