Hacker News new | ask | show | jobs
by dreamcompiler 2436 days ago
Lists are made of cons cells, and a cons cell is simply a two-element array. In a list, the first element of a cons cell contains data and the second element contains a pointer to the next cons cell in the list.

How then should we represent the last cons cell in a list? We have two choices for what goes in the second element of the last cons cell:

1. The last piece of data, or

2. Nothing; i.e. a special non-pointer pointer. In Lisp this is called nil.

If we choose option 1 it's harder for code that traverses the list to be sure it has reached the end. It's also harder to splice a new element (a new cons cell) onto the end of the list dynamically.

Option 1 is the "dotted" form of ending a list and option 2 is the "proper" form.

Option 2 is more common in Lisp. From a type theory point of view, Option 2 restricts the second element of a cons cell to contain either a pointer to a cons cell or nil. This makes reasoning about code, compiling code, and optimizing code easier.