Next: Program Structure, Previous: Top, Up: Top [Contents][Index]

## 1 Overview

This document describes a set of Emacs Lisp facilities borrowed from Common Lisp. All the facilities are described here in detail. While this document does not assume any prior knowledge of Common Lisp, it does assume a basic familiarity with Emacs Lisp.

Common Lisp is a huge language, and Common Lisp systems tend to be massive and extremely complex. Emacs Lisp, by contrast, is rather minimalist in the choice of Lisp features it offers the programmer. As Emacs Lisp programmers have grown in number, and the applications they write have grown more ambitious, it has become clear that Emacs Lisp could benefit from many of the conveniences of Common Lisp.

The CL package adds a number of Common Lisp functions and control structures to Emacs Lisp. While not a 100% complete implementation of Common Lisp, it adds enough functionality to make Emacs Lisp programming significantly more convenient.

Some Common Lisp features have been omitted from this package for various reasons:

- Some features are too complex or bulky relative to their benefit to Emacs Lisp programmers. CLOS and Common Lisp streams are fine examples of this group. (The separate package EIEIO implements a subset of CLOS functionality. See Introduction in EIEIO.)
- Other features cannot be implemented without modification to the Emacs Lisp interpreter itself, such as multiple return values, case-insensitive symbols, and complex numbers. This package generally makes no attempt to emulate these features.

This package was originally written by Dave Gillespie, `daveg@synaptics.com`, as a total rewrite of an earlier 1986 `cl.el` package by Cesar Quiroz. Care has been taken to ensure that each function is defined efficiently, concisely, and with minimal impact on the rest of the Emacs environment. Stefan Monnier added the file `cl-lib.el` and rationalized the namespace for Emacs 24.3.

Next: Program Structure, Previous: Top, Up: Top [Contents][Index]