[REBOL] Re: Confused about "word" forms
From: semseddinm:bircom at: 2-Dec-2010 10:57
> Hello List....
>
> First of all, the term "form" is confusing to me. Would someone give
> me an appropriate synonym.
I'm sure, gurus will answer much better, but here is 50 cent.
form
is a native which converts all values to human readable strings.
> 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.
Words are just symbols which can be a variable or not. They can hold a
value (which can be any value, native, function, string, email etc.). Or
they don't hold a value then they are just symbols.
> 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!
>
> If I want to have assign something to the "age" container, I would
> use:
>
> age: 35
>
> is the ":" the "set-word!" datatype.
Yes it is a set-word which means you are assigning a value to a word.
where does lit-word come in, if you need to talk about a word itself not
by its value.
If you type age and if it has a value you will get that value, if you type
'age it means you are talking about the age word.
Try these examples:
type? first [a:] ;== set-word!
type? first [:a] ;== get-word!
type? first ['a] ;== lit-word!
type? first [a] ;== word!
And also try to examine the source codes of probe and source functions:
?? probe
?? source
You will see the usage of lit-word and get-word.
> If I want the "contents" of age, I would use:
>
> :age and have 35 returned to me. is the prefixed ":" the "get-word!"
> datatype?
:age is a get-word.
age and :age both return same value which is 35. But it is important if
age is a function!
age: func [] [7 * 5]
age ;will return 35, the value by evaluated by age function.
:age ;returns the function itself.
Now look at that:
probe age ;==35
probe :age ;==func [][7 * 5]
without get-word age will be evaluated. So you can pass a function as a
argument also:
f: func [x] [probe :x]
f :age ;==func [][7 * 5]
> I'm getting all balled up with the terminology - how is an "action" -
> like "get the contents of the word called "age", a datatype?
>
> Also, what's the difference between using:
>
> age: 45
>
> SET age 45
>
they are similar, but there is a bit difference. Currently you can skip
that part :) Look at below for one of example using set:
f: does [print "no return value"]
a: f
no return value
** Script Error: a needs a value
** Near: a: f
set/any 'a f
no return value
;no error occurred, a is unset!
Try reading the core.pdf it has lots of explanations about words.
Those set-, get-, lit- words are mostly useful when you are parsing an
input:
parse [a: 5 'b :f] [set-word! integer! lit-word! get-word!] ;== true
Of course it is a meaningless example but you get the idea, you can parse
a config file, a user input, any blocks come from network etc..
But Parse is another deep topic.
Hope I could help.