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.
