What does (X . Y) mean?

toggle-theme.png

Question

When I print out my list, at the end of it I see . before the last element? What’s going on here?

In Lisp, we use cons to construct lists. If we call

(cons 'a ())

then that’s how we could represent a list with a single element in it. In Common Lisp we happen to represent lists as a “chain” of what we call cons cells. The cons function in essence represents a struct with two pointers. The first pointer is what we call the car of the cons cell, and the second pointer is the cdr part of our cons cell.

However, the cdr pointer in our cons cell doesn’t need to point to another cons cell, it can contain any value. So the following is a perfectly valid call to cons:

(defvar wacky-cons (cons 'a "Hello world"))
(print wacky-cons)
;; (A . "Hello world")

And that’s how you get the . at the end of your list - it occurs when the cdr part of your cons is an atom instead of another list or cons cell.

Author: Philip Dumaresq

Email: phdumaresq@protonmail.com

Created: 2021-03-13 Sat 19:09