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

[REBOL] generalities of addresses and values... Re:

From: larry:ecotope at: 9-Oct-2000 19:46

Hi Rishi Well, there are a lot of issues raised by your questions. I am sure you will get a number of responses. I will limit myself to a couple of quick comments. In many ways REBOL is closely related to the Scheme language. 1) In the Scheme community, pass-by-value means the arguments to a function are evaluated by the interpreter before the function is called. This is true of REBOL as well. 2) In Scheme, all (well almost all) values are (at least conceptually) pointers (references). So an arg may be evaluated, but the value is a pointer. REBOL is similar, but more complicated. In Rebol, if a function has a string or block argument, the argument is evaluated before the function is called. But strings and blocks evaluate to themselves. In the case of blocks, the words within the block and recursively in all nested blocks are added to the symbol global table by the interpreter before the function is called, but no further processing is done. The block is then assigned to the local word defined in the function spec which is in the symbol table local to the function. But what is really passed into the function and assigned to the local arg word is a pointer to the string or block. Here is a short example which illustrates this behavior.
>> s: "abcdef"
== "abcdef"
>> f: func [x][remove x] >> f s
== "bcdef"
>> s
== "bcdef"
>> b: [1 2 3]
== [1 2 3]
>> f b
== [2 3]
>> b
== [2 3]
>> >> x ;x is a word local to the function f
** Script Error: x has no value. ** Where: x Notice that modifying the block or string referenced by the local variable x, also changes the original global value. To prevent that you would have to use COPY to create a new copy either in the function call or within the function itself. HTH -Larry ----- Original Message ----- From: <[rishi--picostar--com]> To: <[list--rebol--com]> Sent: Monday, October 09, 2000 11:55 AM Subject: [REBOL] generalities of addresses and values...
> I'm a bit confused on how references work in Rebol. I wish there was a
chapter in the rebol core manual dedicated on this alone. Perhaps someone could comment the general way addresses and values work in Rebol.