Yes, that's what I tried to say.
You're welcome.
Ladislav
----- P�vodn� zpr�va -----
Od: <[EMAIL PROTECTED]>
Komu: <[EMAIL PROTECTED]>
Odesl�no: 28. prosince 1999 16:43
P�edm�t: [REBOL] Series essay Re:(6)
> [EMAIL PROTECTED] wrote:
> >
> > Hi, Joel,
> >
> > although not been asked, trying to answer some questions.
> >
> > 1) The model of binding Gabriele (not Gabrielle)
>
> [sigh...] It seems I am unable to type these days without making a
> typo! [My apollogies, Gabriele!]
>
> >
> > proposed was proposed as a
> > hypothesis, that could explain the Rebol behaviour. Since then it has
> > succeeded to explain every situation encountered and to make valid
> > predictions, so it's validity is much less questionable than validity of
any
> > other binding model proposed.
> >
>
> Gabriele's email to which I was responding certainly expressed some
> ideas that were helpful to me. My questions were intended to help me
> understand it better. I appreciate your assistance in that regard.
>
> So, let me do a sanity check by attempting to answer the questions I
> raised, based on my understanding of what you and Gabriele have said.
>
> > > You've persuaded me that one part of that concept does NOT apply to
> > > REBOL -- that of searching a chain of environments...
>
> There is no "chain of environments". Each word directly refers to its
> own context.
>
> > > >> e
> > > == [a b c]
> > > >> print e
> > > 1 2 12
> > > >> c
> > > ** Script Error: c has no value.
> > > ** Where: c
> > > >> same? 'c third e
> > > == false
>
> The 'c at the third element of 'e ['s value] had been bound to the
> local context of a function (value of 'f), and was therefore a
> different word from a global 'c (although spelled the same).
>
> > > >> h: func [][bind e third e print e]
> > > >> h
> > > 20 21 12
> > >
> > > Hmmmm. Within 'f (where we've bound 'c) the words 'a and 'b would
> > > have evaluated globally. However, attempting to bind 'e back to
> > > that context doesn't restore 'a and 'b (in e!) to refer to the
> > > global 'a and 'b.
>
> Precisely because global 'a and 'b aren't in the context to which the
> third element of 'e ['s value] is bound, and therefore aren't changed
> by the 'bind within 'h ['s value].
>
> > > >> bind e 'f
> > > == [a b c]
> > > >> print e
> > > ** Script Error: c has no value.
> > > ** Where: c
> > > >> a
> > > == 1
> > > >> print first e
> > > a
> > > >> print get first e
> > > 1
>
> The last one is the only one I'm still trying to understand. Running
> the following (in a fresh REBOL console) highlights my question.
>
> >> a: 1
> == 1
> >> b: 2
> == 2
> >> e: [a b c]
> == [a b c]
> >> print e
> ** Script Error: c has no value.
> ** Where: c
> >> f: func [n /local c][c: n bind e 'c print e]
> >> f
> ** Script Error: f is missing its n argument.
> ** Where: f
> >> f 99
> 1 2 99
> >> print e
> 1 2 99
> >> bind e 'e
> == [a b c]
> >> print e
> ** Script Error: c has no value.
> ** Where: c
>
> What I think you've said is that the bind in f affects only the
> third element of e because the other elements refer to words not
> in the context used for the bind. c is bound, but a and b are
> left alone.
>
> OTOH, the last bind above affects all of a, b, and c, because it
> the target context is the global context. Therefore, a and b
> get bound back to a context where they already have values, but
> c gets bound to a context where it does NOT have a value.
>
> Did I interpret your description correctly?
>
> Thanks for your feedback (and patience) !
>
> -jn-
>
>
>