Lists

As well as working with numbers, like 2 and 3, Lisp makes it easy to work with a group of several items, called a list. To specify a list of items you enclose the items in brackets. For example, the list of two-digit squares is:

`(16 25 36 49 64 81)`

A list containing no items is called the empty list. You can write it as:

`()`

but it is also called nil.

In fact we've already seen lists when we asked Lisp to evaluate:

`(+ 2 3 4)`

This was a list of four items: the symbol +, and the numbers 2, 3, and 4. When Lisp evaluates a list it treats the first item as the name of a procedure, and the remaining items as the arguments to the expression.

This illustrates one of the remarkable features of Lisp - Lisp programs and Lisp data are both expressed in the same way, as lists.

Building lists: list

The procedure called list allows us to build our own lists. Try:

```CL-USER > (list 1 2 3)
(1 2 3)```

The procedure list builds a list of its arguments, enclosed in brackets. As with all procedures, the arguments are evaluated first, so try:

CL-USER > (list (* 1 2) (* 3 4))
(2 12)

The items in a list can themselves be lists. Try evaluating:

CL-USER > (list (list 1 2) (list 3 4))
((1 2) (3 4))

This is a list of two items, each of which is itself a list of two items.

Exercises

1. Write an expression that will construct this list:

(1 (2 (3 4)))