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 >