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

[REBOL] Re: Block Creation Re:

From: brett:codeconscious at: 23-Oct-2000 16:48

Hi Joel,
> > I initially expected something else from point 12. At first I > > thought "Chain of references" to mean some sort of data structure > > held together with pointers, when actually it appears you were > > showing how a series reference can get passed around. > > > > That's a good point. I was really thinking of something like > "chain of assignments" but couldn't say that, as we don't have > an "assignment" operator in REBOL! ;-) > > Perhaps I should have said "This behavior does not depend on how > or when the reference to the block was obtained." Do you think > that works as well or better?
I must say I'm not sure. I think the problem is that the word "reference" is a heavily loaded term and here is doing double duty. In one case it means a series reference (in a value sense) in another it means a word referring to a series (in a set-word sense). There could be more.
> > Point 13 say "a shared series reference is being modified". > > Your point is well made, but I would have expected the phrase > > "the same series is being modified" was more accurate. > > > > My first attempt could stand some rewording here as well! > > I avoid saying "the same series" because I consider it misleading. > What is the relationship between A and B in each of the following? > > >> a: [1 2 3] == [1 2 3] > >> b: a == [1 2 3] > >> same? a b == true > > >> b: next a == [2 3] > >> same? a b == false > >> append a 4 == [1 2 3 4] > >> b == [2 3 4] > > To my mind a "series" requires both a sequence of data values and > a position within that sequence. In the second set of expressions > above, I would contend that A and B *are not* the "same series", > both because REBOL says they're not, and because the position of > each is different.
Down this route you probably should add that "series" has behaviour as well - since hash! reacts differently to block! I personally won't though! :)
>Unfortunately, the term "sequence" is not > politically correct REBOL terminology, so it's awkward to describe > the relationship! > > If I try to use more precise language, I end up talking about > two series values that refer to the same data sequence (whether > at the same position or not), and my sentences start sounding > too convoluted for my taste. I'm still working on this one.
I see your point. I think for simplicity of description your really have to add another name to describe what is going on. To finally get the concept into my head I created for myself the term "series handle" - a handle on the series that can slide up and down the series. That way I can understand that I can have other handles on the series and have them in different positions. I agree that Rebol calls this type a series!, but in my mind something of type series! is not the actual series... Oh well, it works for me but I look forward to the results of your futher work on this one :)
>... > That said, I'd be interested in how to use the "signifier/signified" > model to describe this: > > >> a:[] == [] > >> b: reduce [1 a 2] == [1 [] 2] > >> c: reduce [3 a 4] == [3 [] 4] > >> a: reduce [b c] == [[1 [] 2] [3 [] 4]] > >> append b/2 "Hi!" == ["Hi!"] > >> a == [[1 ["Hi!"] 2] [3 ["Hi!"] 4]] > > The point being that there doesn't have to be a "name" or "word" > to act as a signifier!
Ok, but you won't have anything signified!
> It is entirely possible to have data > structures with shared references (or "with references to series > values that refer to the same sequence") which exhibit the > "sharing surprise" without there being any names for the > shared parts.
Most definitely, but how then will you refer to that shared thing? You cannot directly, but relative to something else - something with a signifier. Do you remember Prince's experiment with a no-name status? It was very annoying on the radio because everyone had to keep referring to him as the man "formerly known as Prince" ( a relative reference). If he had supplied a raspberry sound to use when referring to him that would have been the signifier a -"pffft". Here's the last line of your eaxmple: a == [[1 ["Hi!"] 2] [3 ["Hi!"] 4]] How do I know that you have a block that can exhibit the sharing suprise? Because I followed the example in my head with my mental model, or I tried it out in Rebol. The text of Rebol's response in the last line of your email gives no clue that Rebol has in its model a structure with two references to the same series. But it was the best Rebol could do to explain back to me the structure it created. It is relying on me having an accurate mental model to understand its response. So here's an alternative pehaps silly way to introduce all this. Rebol interprets the words you in at the console to build a model in its mind that resembles the model you describe. If you type [] Rebol "thinks" of an empty block. If you had typed my-block: [], Rebol thinks of an empty block and accepts that the fact that you want to refer to it whenever you use the word "my-block". Borrowing a concept from communications theory you might term the empty block the "signified" and the word "my-block" as the "signifier". Later you may decide that you want another word to refer to the same empty block so in Rebol you can refer to the empty block using the name you gave it earlier - like this empty-block: my-block. Doing this means you have two signifiers for the same signified. You can refer to blocks in another way. You can use another block! Blocks are special. They remember values. They remember value in the order that the values were given. You can get a block to remember a number of values like "[apple pear orange]". But this is not enough, if you don't give the block a name it will be forgotten. So this is better fruits: [apple pear orange]. Blocks can remember other blocks like this snacks: [chips biscuits chocolate-bar] grocery-list: reduce [ fruits snacks fruits] Why did I put fruits in twice? - I like fruit. What happens if I decide that fruits should include banana? Well that's ok because grocery-list remembers I wanted fruit list entered twice. So I just change fruits like this append fruits 'banana. So what is happening here? grocery-list is not remembering the individual fruit it is instead remembering that I said I wanted a list of the fruit list first, then the snack list and then the fruit list again. A list that has three references to other lists, but in which two of the references refer to the same list. And so on... With my description I tried to give a flavour of my thinking as opposed to a watertight model. Though, I believe it still has value as a way of looking at what is happening.