If programming is more than just a means of getting things done for you, then Common Lisp is for you!
Table of Contents
A programming language.
What is so special about it? A part of the problem of explaining Common Lisp to non-lispers is that it is akin to explaining Calculus to a middle schooler - one needs plenty of concepts. Explaining something like python to a C programmer who has never used a higher level language would require explaining, perhaps, first order functions and the concept of objects. Explaining Common Lisp to a python programmer requires explaining macros (and the associated details about read-compile-run time), dynamic scoping, condition system, images, off the top of my head. Each of it can seem like a what?
I don't mean this in a demeaning sense - one can get far by knowing just a few things; but if you are curious about the realm of programming possibilities, then welcome to the world of Common Lisp :)! After all this, if someone still wants to have a read at what is so special about lisp, have a read here.
(Very often, newcomers confuse CLisp with Common Lisp. (GNU) CLisp is just an implementation of Common Lisp. It isn't as good or as maintained as several other implementations, like, say SBCL. See the last section below.)
These are not specifically for Common Lisp, but rather for Scheme and Racket, The things learnt here should be transferable to other languages:
- Structure and Interpretation of Computer Programs
- Use How To Design Programs if SICP is too much
- These use Dr Racket
For beginners:
- Touretzky's "Common LISP: A Gentle Introduction to Symbolic Computation"
- or, Graham's "ANSI Common Lisp"
For the former, be sure to pick up a post-1994 version, since it was in 1994 that Common Lisp gained ANSI standardization.
For people with at least some programming background (1 year?)
This is very opinionated. A more larger list is available at the cookbook itself, the sidebar of r/lisp, the Common Lisp website itself, CLiki, and probably at several other places. Here I wanted to achieve a balance between keeping the page short enough to avoid overwhelming as well as covering just enough to get new programmers onboard.
Primarily,
- Awesome CL list
- Quicklisp
But also:
- Ultralisp
- Quickdocs for searching libraries
- qlot
- clpm
- for the library APIs, I found the "Packages" section of libraries on quickref to be particularly useful
Quicklisp is a distro-like common lisp package manager - there are "releases" once every month or so. And there's a guarantee that all the packages in a particular release work together.
However, if the one month development cycle is too long, there is the ultralisp that builds every 5 minutes, in that one doesn't have to wait for a month to fix bugs or get the latest libraries. However, there's no "everything builds together" guarantee.
There's a read-worthy discussion discussing the two philosophies here.
If the reader is okay with Emacs:
Without Emacs:
For vim-users:
- either go with emacs evil-mode with a starter-kit
- or with pure vim, go with slimv or vlime
If you want a bare bones REPL, here's a three step guide for Ubuntu.
A good fun in using lisps is being comfortable with SLIME, that enables
interactive development. I find this akin to going *inside *a building
being constructed, with a hammer and several other tools, and then,
incrementally modifying or building that building. This
video
should illustrate the idea.
This provides
a larger list of shortcuts, though, the most useful commands I find
include C-c C-c
, M-.
and M-,
.
This illustrates a wild
combination of programming and concerts (yes, musical concerts!), that
uses interactive development!
- stackoverflow.
- r/learnlisp
- r/lisp
- r/common_lisp
- Discord Server
- comp.lang.lisp
- There's also LispForum
While asking for help, it's a good practice to first google (or duckduckgo or whatever) your own query to see if it has been asked before.
You don't want to read this! Go back!
Common Lisp is an ANSI standard (standardized in 1994). This is the language. The language has implementations - SBCL, CCL, ABCL, ECL, CLISP, Clasp, Allegro CL, LispWorks, MOCL and may be a few more.
The standard exists in the form of The Common Lisp HyperSpec
- not very accessible we agree. There is an attempt to make the documentation more "attractive" at The Common Lisp UltraSpec.
Individual implementations also have manuals such as the SBCL User Manual or the CCL Manual or the ECL Manual or err ... you got it!
There's also the Common Lisp Wiki.
I told you you shouldn't read this section! Go back to the previous sections and learn lisp. And then, come here if you want to do something mission critical! There are some very experienced lispers (the creators of these stuff themselves!) out in the community whom you should consult.
Amidst all this, are there any practical reasons to use Common Lisp? Check this answer on Quora.
This article was originally published by me on my Wordpress blog.