I've been reading this thread as a relative novice. Does it matter that
practically every Rebol statement returns a value that can be an argument
for a subsequent (chronologically, preceding in the line). I.e., functions
and assignments do "evaluate", rather than merely cause side effects.
a: b: 10
== 10
a
== 10
b
== 10
b: 10 left a value for the a: assignment statement, rather than merely
having the side effect of setting b's value to 10.
No flames, please. I plead ignorance of computer science!
Russell [EMAIL PROTECTED]
- Original Message -
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Friday, November 19, 1999 5:55 PM
Subject: [REBOL] pros and cons. Re:
Hey now, pilgrim. You can call me guru, or you can call
me goof ball, but don't call me Sherman! ;-)
Triple howdy, and two pilgrims, O REBOL guru.
[ . . . ]
Jeff said:
Your aim is to bash REBOL for it's lack of functional
purity, no? :-)
Actually, no.I'm not bashing REBOL. If I'm bashing
anything, it is your description of REBOL as a functional
language (no personal insult intended).
It seems to me that you could not, with out great
difficulty, write the functional code that I provided in an
imperative language. I strain to imagine how to do those in
Java. The definition of "functional", as I read it, has a
bit of slack, though your definition doesn't seem to. (:
Does elisp meet your definition of "functional"? It sure
has a lot of functions in it aimed at emacs-ee-tasks. I
have a fair amount and have seen plenty of elisp code that
reads as a sequence of COMMAND structures for control flow
and data manipulation, to borrow your statement below.
Speaking of elisp-- we've got a half complete REBOL emacs
mode that was started by a nice bright fellow named Joe. It
still gets the closing braces wrong and it chokes on curly
braced strings, but it's done okay for us up till now. Wish
someone could fix it up . . .
The point I'm trying to make is that REBOL *discourages*
functional programming because it provides numerous COMMAND
structures for control flow and data manipulation, and there
is a paucity of non-side effecting natives that can be
combined in EXPRESSIONS. This encourages an imperative
programming style much like BASIC where statements are
executed for their effect, rather than a functional style
where expressions are evaluated for their value. A quick
perusal of the script archive bears this out.
Hmm.. you feel there are "too many imperative forms" in the
language to be called functional. Okay, so what do you
prefer it be called? Procedural?
REBOL is a hybrid-- the message that you are bashing me for
was just an attempt by me to give a friend of mine a quick
and dirty run down of the many awesome features of REBOL.
While you can write functional natives in REBOL, as your
code so nicely shows, these functions are not built-in and
readily available: why build a screwdriver when you are
provided with a complete selection of hammers?
How do you feel about REBOL's referential transparency?
Jeff said:
value? 'Hair-splitting == true
No, if I were hair splitting I would point out the
following:
1. Your version of map, filter, and interleave bomb out
on very large blocks (size 1500)
2. These versions consume memory like it is going out
of style. When I filter a block of 1000 items, the
memory usage of REBOL grows by almost 10K.
3. These versions seem to leak memory. Even after
calling recycle, the memory usage never quite gets
back to where it was. A long-running REBOL process
would cause problems.
Submit a bug report, aye? :-)
Jeff said:
Can't please 'em all... )-:
I don't want you to. Just me.
How am I to please you? You seem harder to please than
most, O nameless one.
-jeff