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.

Reply via email to