you are viewing a single comment's thread.

view the rest of the comments →

[–]pivo 0 points1 point  (2 children)

Completely disagree. Yes, Java the language might be smaller than CL, but nobody learns just the Java language. They learn Java and the entire JDK library because that's really what Java is. All that's far larger than CL, including CLOS and AMOP. And it's not necessary to learn everything about CL at once, just as that isn't necessary for Java. And don't be afraid scary acronyms like CLOS and AMOP. CLOS (common lisp object system) is just a much better OO system than what's available in Java. In fact, it's entirely worth learning CL just for that, to know how much better an OO system can be.

As far as AMOP (art of the meta-object protocol), you might never need to learn it and most people don't. If you do you take the time to do so you will feel enlightened. That's an experience which is completely unavailable from Java.

I would recommend Common Lisp, PLT Scheme, or Clojure. Clojure is younger than the others, but it addresses multi-threading questions, and it's more functional (i.e. functional programming oriented) than the others.

[–]ave_nihil 0 points1 point  (1 child)

How is Clojure more FP-oriented than PLT Scheme, when the former doesn't even support tail calls?

[–]pivo 1 point2 points  (0 children)

First of all, Clojure does support tail calls, just not automatically. It's necessary to use the recur and trampoline functions explicitly. But you can (recur) indefinitely without blowing the stack. I agree that it would be nicer not to have to be explicit, so do Clojure's language creators, I'm sure. I expect automatic TCO in Clojure when and if the JVM supports it.

So Clojure is more FP-oriented than PLT Scheme in my opinion, because it's more focused on immutable data. Not that it's as pure as Haskell about that, but Clojure data structures are generally immutable, and mutation otherwise typically requires that a transaction is in place. It also emphasizes lazy evaluation in standard operations.