My current leisure-time project is porting the examples from Peter Seibel's excellent Practical Common Lisp (PCL) to Clojure.
I think Clojure is interesting for three reasons:
- Clojure is Lisp, but minus historical baggage.
- Clojure gives full access to the JVM and Java libraries.
- Clojure groks concurrency and state.
My ground rules are simple:
- I am not going to port everything, just the code samples that interest me as I re-read Practical Common Lisp.
- Where Peter introduced Common Lisp features in a planned progression, I plan to use whatever Clojure feature come to mind. So I may jump straight into more "advanced" topics, even in the intro chapters.
Please do not assume that this port is a good introduction to Common Lisp! I am cherry-picking examples that are interesting to me from a Clojure perspective. If you want to learn Common Lisp, read PCL. In fact, you should probably read the relevant chapters in PCL first, no matter what.
The Series
- Intro (this post)
- Chapter 3. Practical: A Simple Database
- Chapter 5. Functions
- Chapter 6. Variables
- Chapter 7. Macros: Standard Control Constructs
- Chapter 8. Macros: Defining Your Own
- Chapter 9. Practical: A Unit Test Framework
- Chapter 10. Numbers, Characters, and Strings
- Chapter 11. Collections
- Chapter 16. Object Reorientation: Generic Functions
- Chapter 17. Object Reorientation: Classes
Talks
I am available to give conference talks on Clojure. Check the schedule for an event near you, or contact Relevance (info@thinkrelevance.com) to schedule an event.
Notes
- The git repository for the sample code is at http://github.com/stuarthalloway/practical-cl-clojure.
- Hat tip to Ola Bini who is working on a similar idea, porting PAIP to Ruby.
Comments
For some time now I have wanted to port Graham’s On Lisp code to Clojure. I have to image that someone else has done it by now.
I have been watching your repo for the past few days… looking forward to seeing more.
-m
Very nice blog! Keep up the good work!
Stuart, great work here. Keep it going. I’ve been thinking of doing the same for PAIP: good stuff.
Thanks for the good work, your examples helped me get going with Clojure. I wonder about the ‘spit’ function that you use here. Is it your invention? It does not seem to be part of Clojure.
Cheers, Hans
Excellent! Examples is the thing that im missing the most while studying Clojure, sure i can follow Lisp examples however Clojure data structures are quite different from what i understand so it won’t be a direct port.