Hi Joel
Thank you for this valuable information. I printed it and I am going to read
it again and experiment with it ASAP. The good spirit and the high level of
this rebol-list amazes me every day !
Patrick
----- Original Message -----
From: "Joel Neely" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, December 04, 2001 3:50 PM
Subject: [REBOL] Re: Elegant way to reference a function?
> Hi, Patrick,
>
> pat665 wrote:
> >
> > Hi Chaz,
> >
> > I did not know what a context was so I went for the doc. It
> > reads "This is a shortcut for MAKE OBJECT!. ". So a context
> > is an other name for an object. I'm afraid I don't understand
> > how it will help me. Do you have more on this ?
> >
>
> Unfortunately the context to Chaz referred is not the CONTEXT
> word pre-defined to the interpreter.
>
> curmudgeonly-opinion: {
> Of all the examples of nearly-useless redundant words,
> creating a "shortcut" for the two-word phrase MAKE OBJECT!
> (thus saving a whole 4 keystrokes!) is The Worst Example
> of A Bad Idea, most especially because it overloads what
> is already a barely-documented concept central to
> understanding REBOL.
> }
>
> Here's the meaning of "context" (the idea, not the so-called
> shortcut...) by comparison/contrast with other languages:
>
> In many programming languages, variables are just names for
> addresses in memory into which one may store data. The job
> of the compiler was to generate code by translating variable
> names into the corresponding memory addresses.
>
> Once we programmers started breaking programs into idea-sized
> chunks (such as FORTRAN subroutines -- this is a very old
> issue in programming ;-), we had to deal with the idea
> of the "scope" of a variable, which was the portion of the
> source code within which a particular name had a particular
> address associated with it. Languages such as C are the
> endpoint of that evolutionary path, with various keywords
> to control the visibility and lifetime of these names and
> the associated memory addresses.
>
> In a radical departure from this model, LISP introduced the
> idea that symbols/names in a program were more like words
> in a dictionary; to find the value associated with a name,
> you look that name up in an appropriate dictionary and take
> the corresponding value found there. (Most of the LISP
> literature calls these dictionaries "environments".)
>
> This opened the possibility that there could be multiple
> dictionaries, with one or more of them being relevant for
> a particular range of time or code.
>
> A REBOL "context" is such a dictionary, and there are
> several features of REBOL which cause contexts to be
> created: defining a function, evaluating a USE expression,
> and making an object all do that.
>
> Consider this example:
>
> >> generate-pairs: func [n [integer!] /local pair-with result] [
> [ result: clear []
> [ pair-with: func [m [integer!] n [integer!] /local result] [
> [ result: clear []
> [ repeat i n [repend/only result [m i]]
> [ ]
> [ repeat i n [append result pair-with i n]
> [ ]
> >> result: "this is some other thing"
> == "this is some other thing"
> >> generate-pairs 3
> == [[1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]]
> >> result
> == "this is some other thing"
>
> (not written for maximum efficiency, but to make a point)
>
> The word RESULT appears many times in the above transcript, but
> in one sense there are three words named "result". There's a
> global context which includes the following mapping
>
> 'result --> "this is some other thing"
>
> a context associated with GENERATE-PAIRS which includes (at the
> end) the mappings
>
> 'result --> [[1 1][1 2][1 3][2 1][2 2][2 3][3 1][3 2][3 3]]
> 'pair-with --> (...a function value...)
>
> and a context associated with that last function value above which
> includes (at the end)
>
> 'result --> [[3 1][3 2][3 3]]
>
> These hidden dictionaries are central to the behavior of REBOL,
> but their nature is for the most part undocumented. About the
> only semi-explicit appearance they make in REBOL is through the
> BIND native, which causes one or more words to become associated
> with a different context, based on a word from that context.
>
> Evaluating a REBOL word doesn't mean looking at a corresponding
> memory address fixed at compile time. Instead it means checking
> the context to which that word is bound, and seeing what value
> is associated with that word in the context "dictionary". (And
> there's more that may happen, depending on the type of the value
> that is found there, but that's a different discussion.)
>
> AFAICT (and there are many wizards on this list who will correct
> me if I'm wrong), one can imagine something like this:
>
> 'generate-pairs ---+
> |
> V (global context)
> +----------------+---+
> : ... : :
> 'result ----> +----------------+---+
> | result | *------> "this is some other thing"
> +----------------+---+
> | generate-pairs | *------> +-----------
> +----------------+---+ | ... whatever a function!
> : ... : : | looks like inside the
> +----------------+---+ | REBOL interpreter...
> | *
> +-|---------
> |
> +--------------------------+
> 'pair-with ---+ |
> | |
> V V (context for GENERATE-PAIRS)
> 'result ----> +-----------+---+
> | result | *------> [[1 1]...]
> +-----------+---+
> | pair-with | * |
> +-----------+-|-+
> |
> V
> +-----
> | ...whatever a function!
> | looks like inside the
> | REBOL interpreter...
> | *
> +-|---
> V
> ... you get the idea...
>
> What value you get for the symbol 'result depends on which
> dictionary you look it up in.
>
> Finally, since an object has a context, somebody decided that
> the word CONTEXT could be used as a "shortcut" for the two-word
> phrase MAKE OBJECT! thus providing an opportunity to confuse the
> two meanings.
>
> HTH!
>
> -jn-
>
>
> --
> ; sub REBOL {}; sub head ($) {@_[0]}
> REBOL []
> # despam: func [e] [replace replace/all e ":" "." "#" "@"]
> ; sub despam {my ($e) = @_; $e =~ tr/:#/.@/; return "\n$e"}
> print head reverse despam "moc:xedef#yleen:leoj" ;
> --
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the
> subject, without the quotes.
>
______________________________________________________________________________
ifrance.com, l'email gratuit le plus complet de l'Internet !
vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif
--
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the
subject, without the quotes.