type: special form (fsubr) location: built-in source file: xlcont.c Common LISP compatible: yes supported on: all machines
(let* ( [ <binding> ... ] ) <expr> ... ) <binding> - a variable binding which is of the form <symbol> or ( <symbol> <init-expr> ) <symbol> - a symbol <init-expr> - an initialization expression for <symbol> <expr> - an expression
The LET* special form is basically a local block construct that contains symbols (with optional initializations) and a block of code (expressions) to evaluate. The first form after the LET* is the 'binding' form. It contains a series of <symbol>'s or <binding>'s. The <binding> is a <symbol> followed by an initialization expression <init-expr>. If there is no <init-expr>, the <symbol> will be initialized to NIL. The execution of the bindings will occur from the first to the last binding. The LET* form will go through and create and initialize the symbols and then sequentially execute the <expr>'s. The value of the last <expr> evaluated is returned. When the LET* is finished execution, the <symbol>'s that were defined will no longer exist or retain their values.
(let* (x y z) ; LET* with local vars (print x) (print y) (print z)) ; prints NIL NIL NIL (let* ((a 1) (b 2) (c 3)) ; LET* with local vars & init. (print (+ a b c))) ; prints and returns 6 (let* ( (a 1) (b 2) (c (+ a b))) ; LET* with local vars & init. (print (+ a b c))) ; prints and returns 6 ; because (+ A B) init code ; depends on vars A and B ; which have been created - ; because of ordering of LET*