Thank you for your insight that contradicts and clarifies numerous of my
misconceptions.
That's exactly what I needed.
Best Regards
Dean


On 1 February 2017 at 08:20, Alexander Burger <a...@software-lab.de> wrote:

> He Dean,
>
> > I've "proved" that a let statement's result is visible ANYWHERE within
> it's
> > bounding parens but not outside of them and....
>
> That's right. However, the term "a let statement's result" means something
> different.
>
>    (let A 3
>       (* A 4) )
>
> This 'let' statement has the *result* 12. The symbol 'A' is *bound" to the
> result of evaluating the expression '3'. And this binding is valid
> throughout
> the body of the 'let'.
>
>
> > I was hoping to define the scope of X locally by wrapping the lot with
> > (let X some_dummy_value
>
> 'let' does not define the scope of 'X'. 'X' is an internal symbol which has
> always global scope ("scope" means "visibility"). What 'let' does is to
> set up
> the binding, which means saving the current value, assigning a new one, and
> restoring the old value when the 'let' is done.
>
>
> > but binding X to some dummy value casts that value in
> stone...invalidating
>
> This is not true. The value can be changed
>
>    (let A 3
>       (setq A (inc (* A 4)))
>       ...
>       A )
>
> This should return 13.
>
>
> Note that 'let' is just a shorthand for 'use' + 'setq':
>
>    (let A 3
>       ...
>
> is the same as
>
>    (use A
>       (setq A 3)
>       ...
>
> ♪♫ Alex
> --
> UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe
>

Reply via email to