On Apr 29, 8:45 pm, Per Bothner <[EMAIL PROTECTED]> wrote:
> Rich Hickey wrote:
>
> [Hope you'll forgive me making this an excuse for a competitive
> comparison ...]
>
I have nothing but respect for Kawa and the work you've done there. It
is my first recommendation for those looking for Scheme on the JVM.
Given good implementations like Kawa and SISC, I wouldn't have
undertaken Clojure if I didn't intend to produce something more
significant than yet another minor Scheme variant. Clojure is a very
different Lisp with many enhancements over older Lisps.
A critical enhancement, and one that is difficult to retrofit, is a
point you skipped over in your comparison - the extension of the
sequence library to an abstraction of first/rest, freeing it from its
traditional binding to concrete cons cells. This goes directly to the
deeper integration I spoke of. For instance, here's one way to pull
all of the System properties keys whose names match some regular
expression:
(filter #(re-find #"java" %) (map key (System.getProperties)))
-> ("java.runtime.name" "java.vm.version" "java.vm.vendor" ...)
And here's one way to add the entries at those keys into a Clojure
map:
(reduce conj {}
(filter #(re-find #"java" (key %)) (System.getProperties)))
-> {"java.specification.version" "1.5",
"java.vm.specification.name" "Java Virtual Machine
Specification",
...}
It's functional and idiomatic Lisp. The filter, reduce and map
functions are the very same ones that work on all Clojure data
structures, and the key function the same one that works on Clojure
maps.
Clojure is a functional language. Its data structures are immutable
and persistent. It extends the core Lisp data types to (immutable,
persistent) vectors, hashed and sorted maps and sets, all with deep
code-as-data support. The sequence library, in addition to being
abstraction based, is lazy and obviates add-on stream libraries. It
has a software transactional memory and agent system, metadata,
pervasive destructuring binding, list comprehensions, regexes etc.
Kawa is great, but it's not a substitute for, nor superset of,
Clojure.
I'm happy to let the rest of this 'competition' play out in the
marketplace of users.
Regards,
Rich
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM
Languages" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/jvm-languages?hl=en
-~----------~----~----~----~------~----~------~--~---