Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

Meaning, Value, Binding and Context

 [1/4] from: al::bri::xtra::co::nz at: 27-Aug-2000 23:24


Ladislav:
> Rebol differs from human languages in some respects. One of them can be
found comparing Rebol Values vs. Human Values (see http://www.geocities.com/lmecir.geo/evaluation.txt). This may be a surprise for both experienced and inexperienced programmer, because that fact is hidden in other programming languages to some extent. Another difference can be found comparing the behaviour of Rebol (CQSB/DRP) functions with the behaviour of their Pure CQSB counterparts (see http://www.geocities.com/lmecir.geo/contexts.txt). A set of the differences can be found studying the behaviour of code - modifying functions like Repeat, Make Object!, Use, Foreach, ... The latter difference can be considered a bug, of course, but it is present in Rebol nowadays. This is quoted from Ladislav's web page: <Quote> ; create a block Blk containing a word 'a blk: copy [a] a: 12 ; now append another word to Blk b: make object! [append blk 'a a: 13] probe blk ; test if blk contains equal words equal? first blk second blk equal? get first blk get second blk What is the reason behind such a "mystery"? The answer is simple: *Words have Bindings* and the first Word in Blk has a different Binding, than the second. </Quote> I differ slightly in my interpretation.
>> ; create a block Blk containing a word 'a >> blk: copy [a]
== [a]
>> a: 12
== 12
>> ; now append another word to Blk >> b: make object! [append blk 'a a: 13] >> probe blk
[a a] == [a a]
>> ; test if blk contains equal words >> equal? first blk second blk
== true
>> equal? get first blk get second blk
== false
>> first blk
== a
>> second blk
== a
>> get first blk
== 12
>> get second blk
== 13
>> a
== 12
>> b/a
== 13
>> probe a
12 == 12
>> probe b
make object! [ a: 13 ]
>>
Words have meanings (or values). The meaning of a word depends on it's context. Two words may look the same, but can have different meanings, because of their different contexts. 'b is an object with a different context to the surrounding context. The word 'a inside 'b has a different meaning from the 'a defined inside the global context. While the two words: first blk and: second blk look the same, they both result in 'a, they have different meanings. The first means: 12 and the second means: 13 That's all there is to it. It's very like human language. For example, bear . There's a bear in the woods. That's all it can bear. Two words exactly the same like [a a], but with different meanings. Here the surrounding words supply the context, enabling the reader to know that the first "bear" (a) means a four legged mammal (12), while the second "bear" (a) means an amount of weight (13). One can change the meaning of the word by binding it into a different context. Here I bind the block into the global context:
>> bind blk 'a
== [a a]
>> get first blk
== 12
>> get second blk
== 12 and so make both words in the block mean the same. I can reassign the meaning of the words in the block by 'bind-ing the block's words into the context of the object 'blk, like this:
>> bind blk in b second first b
== [a a]
>> get first blk
== 13
>> get second blk
== 13 And I really like the simplicity of the line: bind blk in b which really means what it says. The only confusing thing is: second first b
>> first b
== [self a] 'first on a object gets you a list of words in the object. While 'second simply gets the first word after 'self:
>> second first b
== a so allowing the 'bind to work.
>> help in
USAGE: IN object word DESCRIPTION: Returns the word in the object's context. IN is a native value. ARGUMENTS: object -- (Type: object) word -- (Type: word) Ladislav:
> My personal point of view is, that my previous experience with other
programming languages helped me to understand Rebol and appreciate its advantages. There's two succesful approaches to understanding Rebol. Have little understanding of conventional computer languages - the innocent approach. Have lots of understanding of conventional languages as Carl Sassenrath has done and as most likely, Ladislav has. If you know one or a few conventional third generation languages, then you're behind on the learning Rebol curve, until you unlearn these languages. Andrew Martin See Rebol, Do Rebol, Know Rebol... ICQ: 26227169 http://members.xoom.com/AndrewMartin/

 [2/4] from: lmecir:geocities at: 28-Aug-2000 17:52


Hi, your explanation looks natural, but I am not sure, how it copes with: Example illustrating, that the same value and equality of Words doesn't mean the same Binding (totally unnatural for human languages and for some programming languages too): blk: copy [a] a: 11 b: make object! [append blk 'a a: 11] print [ mold blk ":" mold reduce blk ] print [ "Do the first and the second element above have the same Binding?" same? first blk second blk ] moreover, the "human approach" is out of luck when trying to predict the behaviour of: f: func [level] [ make object! [ a: 2 * level probe b: either zero? level [ f 1 ] [ none ] a: a + 1 ] ] probe f 0 Regards L

 [3/4] from: g:santilli:tiscalinet:it at: 28-Aug-2000 19:41


Hello [Al--Bri--xtra--co--nz]! On 27-Ago-00, you wrote: A>>> bind blk in b second first b A> == [a a] A>>> get first blk A> == 13 A>>> get second blk A> == 13 A> And I really like the simplicity of the line: A> bind blk in b A> which really means what it says. The only confusing thing A> is: A> second first b If you write that as: bind blk in b 'self it is much less confusing. Regards, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/

 [4/4] from: al:bri:xtra at: 29-Aug-2000 16:00


Gabriele wrote:
> If you write that as: > > bind blk in b 'self > > it is much less confusing.
It is. The line: bind blk in b second first b comes from my earlier efforts in getting nested and copied objects to work properly. At one stage I wanted to make sure that I was binding dialect code to the right words in an object, the above code worked, and I've never changed it since then. There's a problem copying nested objects in that Rebol only shallow copies objects, where as I wanted deep copying. Andrew Martin Still learning... ICQ: 26227169 http://members.xoom.com/AndrewMartin/