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

[REBOL] [array] [syntax] Re: Some other questions

From: joel::neely::fedex::com at: 22-Nov-2003 7:45

Hi, Mike, Anton has already given a direct answer, but let me dig deeper. Mike Loolard wrote:
> 1) If I have an object - how do I create an array of objects with it ? > for example > > chicken: make object! [ > tasty: "wings" > ] > > now I would want to have an array of objects of that type. > > I tried it like that: > > chickenfarm: make chicken [] array 10 > > It doesn't seem to work that way, though ? >
What you have written is two distinct expressions: chickenfarm: make chicken [] and array 10 One of the crucial light-bulbs that went on in my head when I first began using REBOL is the following: REBOL has no syntax! (other than the low-level lexical syntax for e.g. strings, numbers, etc., but I keep the sentence short for emphasis and effect.) All you have in REBOL is values, and when you put a bunch of them together, you have expressions. That's all. So let's look at the expressions you wrote, step by step. chickenfarm: ; this is a set-word which will take the value ; of the immediatly-following expression make ; use HELP; make wants a TYPE/SAMPLE and a SPEC chicken ; this is an object, so MAKE will create an object [] ; ... with this spec, i.e. with the same words ; as the original chicken with no added words ; or new values for the same words At this point, make has a prototype object and an empty spec, so it can construct a new object just like CHICKEN. Then, at that point, the expression following CHICKENFARM: has completed evaluation, so CHICKENFARM is set to that result. Now we continue: array ; again, use HELP, to learn that ARRAY wants a 10 ; size (but the initial value is optional). So... At this point, ARRAY has a size (but no initial value, as you didn't use the /INITIAL refinement) and so happily creates a 10-element block, with each element being NONE (REBOL's value that means "nothing here"). I hope I'm not insulting your intelligence with the details above! Reading through your email, I get the feeling that you may still be trying to read/write REBOL as if it were some other language, and just want to suggest a shift in perspective that I found helpful when I was beginning with REBOL. -jn-