a twist on my previous statement...

"REBOL: others define code, rebol expresses it"

and a new one:

"REBOL: its quick and dirty... without the dirty"



---------------------------
  DRIFTNG A LITTLE BIT...
---------------------------

In this ongoing discussion, it has been confirmed that you can evaluate code 
"on-the-fly" in most modern languages, or have modules or extensions which allow it.


But rebol, being an expression parser and evaluator, handles code in many ways like if 
it where any kind of mathematical expression.  This means evaluating code on the fly 
is INTRINSIC to rebol... its not just a feature.

no one marvels when they know that their language can calculate an expression with 
functions and variables:

b = (x + abs(x) + 45) / 2


here each parenthesis will eventually receive a value once its internals have computed 
and will get a numerical value. 

in the above, execution is impossible without defining x, right?  I mean, any computer 
programmer will react instantly and say: "of course!".


Many rebolers have yet to realise that rebol actually handles all data  in much the 
same manner, relatively speaking.  Code being just another type of data to handle. 
Defining, evaluating, passing, and assigning values to/from words as it encounters 
them.




warning:
 The following code and explanations is a little more advanced, and is an excellent 
primer for those of you who want to get in on the more "obscure" (advanced) 
functionalites of rebol!  If you don't understand the following, you should look up 
each word in the help and try to understand it piece by piece.  It might open up your 
understanding of all that jabbering, the more experienced rebolers have been doing. ;-)


type this in the rebol console:

>> hello: do prints: func [arg][does compose [print (arg)]] "hello world"
>> hello
hello world


Each thing in the expression is evaluated one by one like a mathematical expression.

here, the word PRINTS eventually got a value while rebol was evaluating the expression 
line, so we can then try:

>> bye: prints "bye bye"
>> bye
bye bye


bye and hello really are new functions, as proven here:

>> source hello
hello: func [][print "hello world"]


This shows how you can create you own custom "statements", as defined in other 
languages.


conclusion:
-----------

Yes, many other languages support on-the-fly eval() of code, but to get that back 
right in the language without any additional effort, to be able to play with code like 
data, to assign contexts to words, store them, generate new functions using these 
contexts and all the manner of advanced modifiable code, IMHO rebol is the current 
(easy and fast to use) king of the hill...


HTH!


-MAx
"dont be fooled.  Simple is hardest"



 

> -----Original Message-----
> From: James Marsden [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, December 17, 2003 4:07 PM
> To: [EMAIL PROTECTED]
> Subject: [REBOL] Re: What does REBOL fix?
> 
> 
> 
> [EMAIL PROTECTED] wrote:
> 
> >Can we find a snappy one-liner?
> >
> >http://www.paulgraham.com/fix.html
> >
> >Sunanda.
> >  
> >
> Dialecting in Rebol, more fun than Latin!
> -- 
> To unsubscribe from this list, just send an email to
> [EMAIL PROTECTED] with unsubscribe as the subject.
> 
> 

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to