[REBOL] Re: Newbie Q: Cropping text
From: brett:codeconscious at: 9-Jul-2002 18:44
> First off, my thanks to everyone demonstrating The Way Things Work. I
> get to work in REBOL all that much anymore, so what knowledge I had of it
> dwindled, and I find myself looking at older code of my own and thinking,
> did I do that? It works, but *how* does it work?
> > char-sequence: next [a b c d e]
> > This line has three values - a set-word!, a word! and a block!. When
> > line is evaluated, again a block! series of values will be created, this
> > time of five words (a, b, c, d, e). The block! will be at its head
> > returns true). Then NEXT is evaluated and it takes the block as input.
> > returns a different block! value - that is the new block! has a
> > index to the original but retains a reference to the same sequence of
> > elements. Finally in the evaluation, char-sequence is set to refer to
> > new block! and if you perform INDEX? on char-sequence afterwards, you
> > get the value 2 returned. If you performed FIRST HEAD char-sequence you
> > would get the value 'a returned.
> Whoah. That.... damn. That's just screwed up. So if I POKE a new
> into the original sequence, the char-seq gets changed as well. Wow. Time
> make prodigious use of COPY, it looks like. *whistles*
Not screwed up at all :^) C'mon Charles, you were the one that mentioned
pointers! C represents strings with a pointer to char, and if you want to
make a duplicate of a string in C you have to use strcpy or whatever it is
called. And you could have two pointers to the same string in C.
So yes, there is only one sequence of elements, and yes COPY has a very good
However, this whole pointer description is avoided in REBOL docs because it
is not really required - it is only useful for old-language programmers ;^)
REBOL uses word! as a symbol. You can set a word to a value but that does
not mean that the word has the datatype of the value - only the value has
that, the word is simply a reference to the value. And as I mentioned before
more than one word could refer to the same thing, and the same word over
time can refer to values of completely different datatypes.
> > So now this next expression of six values
> > a: next b: next c: next sequence: [a b c]
> > Now if you try printing A you will get an error message. This is because
> > index is past the tail of the series. But A can still be used try
> > HEAD A. So in this last example I have made four seperate references to
> > same underlying data series and each of these is referred to by a
> > word (A, B, C and Sequence).
> AAAAAIIIIIEEEE!!!!! *gun shot*
> > > Thanks for your help, Brett.
> > My pleasure. I hope the descriptions above are useful and not uselessly
> > wordy!
> Heh. No, not too wordy. However, I am now frightened of REBOL ;)
> certainly a madman ;)
Actually I feel safer using REBOL than all the other languages I programmed
with over nearly two decades.
The expectations and assumptions we bring to a new situation colour it in a
certain way but it may not be the "reality" or the way we'll see the
situation in time. My little bit of philosophy for the day. :^)