Jeff

Ladislav Mecir's excellent "essays" may help, particularly 
http://en.wikibooks.org/wiki/REBOL_Programming/Advanced/Interpreter

You can access Ladislav's other work via 
http://www.fm.vslib.cz/~ladislav/rebol/

Regards

Peter

On Monday, Mar 6, 2006, at 13:38 Asia/Kuala_Lumpur, Jeff Massung wrote:

> I'm getting a tad bit confused on when REBOL decides to treat 
> something as
> code. If I open up the console and type a couple snippets of code, the
> language doesn't quite work the way I expect it to (coming from Lisp). 
> I'm
> hoping some of the more experienced here can lend me a quick 
> explanation...
> :)
>
> Here I'll show my little test in REBOL along with a Lispy counterpart 
> to
> show what I think should happen.
>
>>> test: [ repeat i 9 [ prin i ] ]
> == [ repeat i 9 [ prin i ] ]
>
> Okay, now I have a word (test), which is bound to a list of data 
> consisting
> of words, an integer, and another list of words. Simple enough:
>
> (setf test '(repeat i 9 (prin i))).
>
>>> do test
> 123456789
>
> Looks good. It treated the list as a block of code and executed it.
>
> (eval test)
>
>>> print test
> 123456789?unset?
>
> Huh? Shouldn't it have just printed the list like the original 
> assignment
> return value?
>
> (print test) -> (repeat i 9 (prin i))
>
> I know that I can get the original list by doing:
>
>>> get 'test ; or :test
> == [ repeat i 9 [ prin i ] ]
>
> But I just figured for the print statement, test would just be 
> evaluated
> (after all, test is just a list, evaluating the list would be an extra 
> step,
> which is what I assume is what DO does, but it seems that PRINT does 
> it,
> too)?
>
> So, now assuming that maybe PRINT is a special case senario, I decided 
> to
> try another simple function: JOIN. I get the same "quirkyness" (well, 
> quirky
> being defined as "not what I expect :)"):
>
>>> join "foo" test
> 123456789 == "foo?unset?"
>
>>> join "foo" get 'test
> 123456789 == "foo?unset?"
>
>>> join "foo" :test
> 123456789 == "foo?unset?"
>
>>> join "foo" [test]
> == "foorepeat i 10 prin i"
>
> I would have expected the first to do what the last did. So, for now, I
> gather that that words are evaluated (completely) before being passed 
> on to
> another function. So, to test that theory, here's my next statement:
>
> foo: func [block] [
>   prin "**" do block print "**"
> ]
>
>>> foo test
> **123456789**
>
> If the my hypothesis was correct, what I would have expected as output 
> would
> have been:
>
> 123456789**?unset?**
>
> So, now I'm utterly confused. :)
>
> Now, I'm sure there's just one tiny snippet of REB-know-how that I'm 
> missing
> (or a trivial step in the evaluation process that I'm not aware of) at 
> the
> moment that will make this all just "come together" for me. Consider me
> waiting to be enlightened. :)
>
> Thanks!
>
> Jeff M.
>
> --
> [EMAIL PROTECTED]
>
> -- 
> To unsubscribe from the list, just send an email to
> lists at rebol.com with unsubscribe as the subject.
>

-- 
To unsubscribe from the list, just send an email to 
lists at rebol.com with unsubscribe as the subject.

Reply via email to