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

[REBOL] Re: Confused about "word" forms

From: lmecir:volny:cz at: 2-Dec-2010 16:55

#[[Duke Hello List.... Duke]] - hi, your questions deserve good answers, and I hope you find my notes below at least a bit helpful. #[[Duke First of all, the term "form" is confusing to me. Would someone give me an appropriate synonym. Duke]] - if I understood you well, you did not want a "synonym" for form , rather you wanted to have a proper notion to refer to different word types. In my opinion, the proper notion is either "datatype", or word type . #[[Duke I understand that a Rebol "word" is not a variable bound to a datatype as in other programming languages. It is merely the "name" of a container which can hold any Rebol datatype; which itself has the word! datatype. Duke]] - this is not something you should worry much about. Words are REBOL values of their own right, but they *can* be used as variables, to refer to other REBOL values, also. #[[Duke Assuming the Rebol word "age", if I want to have the name of the container returned to me, I would use the syntax (form) 'age. Correct? Where does the "lit-word" datatype come in? I don't get the terminology! Duke]] - hmm, this may be quite hard to explain, so, let me introduce the QUOTE function to you. This function takes any argument (in R3) without allowing the DO function (or some of other common evaluators) to evaluate it. Thus, from the QUOTE function we get exactly what we give. Example:
>> type? quote age
== word!
>> quote age
== age So, to obtain the word age you mentioned above, we can use the word and pass it to the QUOTE function. That is not the only way, how to obtain the word age, though, there is yet another way:
>> type? 'age
== word!
>> 'age
== age This is what you may encounter more frequently, but, in fact, the processing is more complicated, than when using the QUOTE function, since, when we examine:
>> type? quote 'age
== lit-word!
>> quote 'age
== 'age we see, that 'age is actually not a word, it is a lit-word! Why, then, the expression 'age yields a word, not a lit-word? The reson is, that every REBOL value is processed (evaluated) somehow by the DO function, unless such an evaluation is prohibited by using e.g. the QUOTE function. And, the evaluation of a lit-word is done so, that the said lit-word is processed, yielding its corresponding word. #[[Duke If I want to have assign something to the "age" container, I would use: age: 35 is the ":" the "set-word!" datatype. Duke]] - no, not at all, the age: value is a set-word, as can be seen when trying:
>> type? quote age:
== set-word!
>> quote age:
== age: And, this set-word, when processed by the DO function, causes the age variable to refer to the integer value 35, which also becomes the result of the expression. #[[Duke If I want the "contents" of age, I would use: :age and have 35 returned to me. is the prefixed ":" the "get-word!" datatype? Duke]] - I refer you to the above explanation, this is just an analogical situation. #[[Duke I'm getting all balled up with the terminology - how is an "action" - like "get the contents of the word called "age", a datatype? ]] - the :age REBOL value has a datatype. The "action" you mention takes effect only when the DO function (or some other similar function) processes the value. #[[Duke Also, what's the difference between using: age: 45 SET age 45 Duke]] - this time, for the expressions to have a similar effect, you need to write: age: 45 ; i.e. you have this right set 'age 45 ; since 'age is processed becoming age before being passed to SET ; or, alternatively: set quote age 45 -Ladislav