> The key there is the back-quote (`) before the L to force evaluation
> > See the doc section on 'Read-Macros'
> > http://software-lab.de/doc/ref.html#macro-io
> Exactly. So the whole 'let' expression is read, *then* evaluated. 'L' is
> what it
> was globally at the time this expression was read, usually NIL.
If I understand correctly what you said the reason for (let K 3 '(print
`K)) returning (print NIL) rather than (print 3) [being K not previously
defined] is that the sequence of steps is:
1- read the whole let expression , here (let K 3 '(print `K))
2- evaluate the whole let expression resulting in (let K 3 '(print NIL))
since the evaluation of K returns NIL in this context because K is not
3- evaluate the "let prog" in the context stated by let bindings, thus
evaluates '(print NIL) in a context where K is bound to 3, but obviously K
is not used in the "let prog"
is it that way?
if so, would be hard to make the jump over step 2? that is making the quote
protecting the whole expression and evaluating the read-macro ` only in
step 3 when the expression is evaluated under symbol bindings stablished by
let? maybe I'm saying nosense, sorry in advance! ;-)