Macro Let

Part of:

package new-let
( let clauses &body body )
A generalization of CL:LET that better supports nested bindings and multiple
values. Syntax: (let (<clause>*) <body>). The <clause> syntax is more general
than for CL:LET:
<clause> ::= <symbol> ; binds to NIL
| ( <symbol> ) ; likewise
| <clause1>
<clause1> ::= ( <symbol>+ <form> ) ; binding
| ( <clause1>+ ) ; nesting
When a clause begins with more than one variable name, they are to be bound to
successive values of the form. The nesting of clauses indicates sequencing of
bindings; more deeply nested clauses may reference bindings of shallower clauses.
All bindings at a given depth are done in parallel. This allows arbitrary
combinations of parallel and sequential binding. Standard declarations at the
head of BODY are handled correctly, though nonstandard ones may not be. If two
variables of the same name are bound at different levels, any declaration
applies to the inner one.