Introduction

This is a series of short Lisp tutorials I recently wrote to help my teenage daughter and son learn Lisp.

In my view Lisp is an ideal language to learn as a first computer language for several reasons:

It's interactive: you can type Lisp commands at the Listener and see the results instantly.

It's an elegant language, without the arbitrary constructs present in many other languages.

It's a fast and powerful language that can be used to write real production programs.

The tutorials are aimed at someone with no previous experience of programming, and they are designed to take the reader to the stage where they can start writing their own programs to solve practical, interesting applications.

One of the most daunting aspects of learning a new programming language is the vocabulary, so one of my aims was to design tutorials that could be used with a minimal core set of 38 Common Lisp procedures, rather than provide a comprehensive tour of all the Common Lisp procedures and features.

These procedures, together with six LispWorks user-interface procedures, are sufficient to construct all the applications in the second half of the tutorials. For reference a full list of the core set of procedures is given in the Index of Procedures.

Latest additions!

Many more exercises! (31st August 2014)

Running the Tutorials

The tutorials should run with any version of Common Lisp, but they were developed with LispWorks and this is the version I recommend. A free evaluation version of LispWorks is available called LispWorks Personal Edition; you can download it here:

All the Lisp programs on this site are provided under a CC0 1.0 licence; in other words you can pretty much do what you want with them.

Comments

Experienced Lisp programmers may say that there are built-in Lisp procedures that will achieve far more succinctly and efficiently what I have achieved in some of the example programs here.

My defence is that the point of these tutorials is not to teach Common Lisp in its entirety, but to help the reader understand the general principles of programming in Lisp. I believe that it is daunting for a beginner to be confronted with a catalogue of Lisp procedures to learn by rote. It is far more important to understand how to approach a problem, and break it down into simpler problems with the help of recursion.