Common Lisp is described by the ANSI X3J13 standard; it is a rather large, featureful, and complex language. It strove to be at least somewhat compatible with Lisp Machine Lisp, MacLisp , and Interlisp, which were three of the most widely used dialects at the time of its development.
It is a rather large, rich, and complex environment. To some, it is too large. (Mind you, if it is to be considered "bloated," what shall we say about C++? )
There is a Common Lisp Foundation , incorporated in the Netherlands, seeking to provide support for meetings and developments about CL.
There are a wide variety of implementations of Common Lisp, of considerable maturity, including:
Offerings from commercial vendors
Producers of Allegro Common Lisp (ACL), which happens to be available for Linux in a limited "gratis" form.
Products include a freely available LispWorks for Linux and Windows; the "Enterprise" version includes CORBA support.
This used to be Harlequin...
Digitool - MCL - for MacOS
Free Software implementations
CMU CL is a free, high-quality ANSI Common Lisp system for Unix workstations originally developed at the School of Computer Science of Carnegie Mellon University. It includes a bytecode compiler and has been known to generate native code for architectures including IA-32, Alpha , PPC, MIPS, PA-RISC.
SBCL is a system derived from CMUCL which can build itself from scratch, requiring only vanilla ANSI Common Lisp as a cross-compilation host, by building a portable CL compiler called Python, (no relation to the Python scripting language!) and using that as the cross-compiler to generate SBCL. (hosted at SourceForge )
The "point" of SBCL is to provide a system that is a great deal easier to bootstrap than CMUCL.
CLISP Home - Common LISP system implemented in C
It can compile to platform-independent bytecode , and includes a FFI (Foreign Function Interface) to C.
A somewhat limited CL implementation that generates C as output and is intended for embedding into applications. It was written at Gensym; when they decided not to pursue licensing it, it was released under a BSD-like license.
ECoLisp (Embeddable Common Lisp) is an implementation of Common Lisp designed to be embeddable into C based applications. Licensed under the GPL .
ECL-Spain is a Common Lisp implementation forked from ECoLisp.
Open Source MCL (kernel of MCL)
The kernel of MCL is available as a PPC-based native code Common Lisp implementation. There is also some SPARC code in the codebase.
Some implementations are "available" that may be of limited usefulness either due to licensing constraints or unavailability of platforms on which to run them.
BBN Butterfly Common Lisp and BBN Butterfly Scheme
This directory contains the sources and binaries for BBN Butterfly Common Lisp and BBN Butterfly Scheme. These programs have been publicly released by BBN for the use of the programming community. This software is unlikely to run on any machine other than the Butterfly without significant work; but it might make a good starting point for a free implementation of Common Lisp.
A probably-Russian implementation of Common Lisp for Win32.
A Java -based Common Lisp IDE
An Aussie CL for Linux, HP/UX, and Solaris
Amazon present Common Lisp : The Language; Guy L., Jr. Steele, Guy L. Steele; Paperback
Amazon present Lisp ; Patrick Henry Winston, Berthold Klaus Paul Horn; Paperback
He links to me, so I of course link to him :-).
Amazon present The ANSI Common Lisp (Prentice Hall Series in Artificial Intelligence); Paul Graham; Paperback
On Lisp: Advanced Techniques for Common Lisp; Paul Graham; Paperback
This book is no longer in print, and so may prove difficult to find. Paul Graham has been kind enough to make it available electronically in Postscript form.
Successful Lisp - Prerelease Edition
This will become a book on Common Lisp targeted at those wanting to learn the language. The original plan was for this to be published by one of those "major publishers;" they concluded that the market for CL books was too crowded, and so the author will be self-publishing.
Norvig is coauthor of Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp which is an excellent text on the use of Common Lisp in AI and other applications. It covers AI very well, but many of the techniques are quite generally usable.
Comprehensive basic Lisp handbook from Franz
Common Lisp: A Gentle Introduction to Symbolic Computation
This book may be distributed in hardcopy form, for non-profit educational purposes, provided that no fee is charged to the recipient beyond photocopying costs. All other rights reserved. You may not redistribute the Postscript file, e.g. you may not put a copy on another web page, or include it on a CD-ROM.
Mark Watson's Open Content Free Web Books
This includes a book on AI programming in Java, and a book on Common Lisp
Albert is a Common Lisp doc-generator, comparable to Javadoc and Doxygen. Currently it generates DocBook. It reads an ASDF system definition and documents the system.
CLQR - Common Lisp Quick Reference
A quick overview of the thousand or so symbols in ANSI CL
FAQ: How can I alter my copy of CLTL2 ([ Common Lisp the Language], 2nd edition, by G. L. Steele Jr., Digital Press, 1990) to note ANSI Common Lisp changes since its original publication?
This document describes how to alter (mark up or edit) your personal copy of CLTL2 to note new information from the ANSI Common Lisp standard. No guarantees on the completeness or accuracy of the information provided is expressed or implied. Use at your own risk. A doctored CLTL2 is NOT the ANSI standard. In fact, this FAQ has many known but minor omissions that are too awkward to add with pencil to CLTL2. My purpose in providing this information is to help you improve a familiar book and common source of information on Common Lisp. For information on ANSI Common Lisp I recommend these two sources: The Common Lisp HyperSpec , and Appendices C and D of the book [ANSI Common Lisp] by Paul Graham, Prentice-Hall, 1996 (a 2nd edition of this book was to be due out in April 1999). A third source used in the preparation of this FAQ is Appendix A of the [Allegro CL User Guide, Version 4.3], March 1996. This appendix is Franz's tally of the ANSI committee's votes. Franz also distributes an alternate html version of the ANSI Common Lisp Standard with the ACL 5.0 product. It covers the same material as the Hyperspec.
Send all comments, corrections, additions, complaints, etc. to
<john.watton@ieee.org>
.
Example of the notation used: p128,c2,ld4,lu7 translates to page 128, column 2, go 4 lines down from top and go 7 lines up from bottom.
ANSI replaced function
get-setf-method
with
get-setf-expansion
. ANSI renamed
get-setf-method-multiple-value
to
get-setf-expansion
. Note deletion: p144,ld9-lu8
get-setf-method
definition Replace
get-setf
-[method -> expansion]: p133,ld3
p135,ld2,ld18 p137,ld1,lu2 p142,ld18,lu3 p143,ld4,ld8 p145,ld2?,ld8?
p688,lu5 Replace get-setf
-[method-multiple-value
-> expansion]: p145,ld3,ld4
ANSI deleted the functions
variable-information
, function-information
,
declaration-information
, augment-environment
,
parse-macro
, and enclose
as well as the macro
define-declaration
. This effectively deletes section "8.5
Environments:" p207,ld16-p214,lu1
ANSI deleted functions applyhook
and
evalhook
along with the variables *applyhook*
and
*evalhook*
. Note deletions: p179,lu15 p203,ld11 p490,ld9
p490,lu7 p491,ld12-p493,lu1 the definitions
ANSI deleted generic-flet
,
generic-function
, generic-labels
and
with-added-methods
. Note deletions: p73, Table 5-1, lu4,lu3
(in table) p216,lu12-lu9 p787,ld20-ld21 p787,lu15-p788,ld3 four small
paragraphs p788,lu19-lu18,lu14 p844,lu5-p846,lu1
generic-flet
, generic-function
,
generic-labels
definitions p862,ld1-p863,ld8
with-added-methods definition
ANSI renamed define-setf-method
to be
define-setf-expander
. Replace
define-setf
-[method -> expander]: p127,lu14 p128,ld6
p129,ld15,lu3 p131,ld8 p132,ld1,lu5 p133,ld8 p137,ld1 p141,lu6
p142,ld3,ld7,ld10,ld15,lu3 p143,ld5,lu15,lu10 p168,lu11,lu8
p216,ld1,ld15 p672,ld7 p688,lu11,lu8 p841,lu9
ANSI renamed special-form-p
to
special-operator-p
. Replace special-
[form ->
operator]-p: p73,ld5 p119,ld18 p120,lu14,lu5,lu4 p121,ld1 p195,ld9
ANSI renamed
simple-condition-format-string
to
simple-condition-format-control
along with the condition
initialization keyword :format-string
to
:format-control
. Replace
simple-condition-format-
[string -> control]:
p918,ld12,lu14,lu5 p919,ld1,lu3 Replace :format-[string ->
control]:
p887,ld11,lu9 p888,ld11 p891,lu13,lu8 p912,ld18
p915,ld6 p918,ld11,lu15,lu6 p919,lu5
ANSI renamed base-character
to be
base-char
. Replace base-[character -> char]:
p26,lu3 p27,ld2,ld4,ld5,ld8 p33,lu5,lu4 p39,lu5,lu4 p49,lu10 p50,ld15
p61,lu2 p62,ld2 p371,lu1 p647,lu14,lu7
ANSI renamed extended-character
to be
extended-char
. Replace extended-[character ->
char]:
p27,ld1 p39,lu4 p49,lu11 p50,ld15 p371,lu1
ANSI deprecated the functions set
and
gentemp
. Make note on definitions: p122,lu16 for
set
p246,ld13 for gentemp
ANSI restored the module facility. It is now only deprecated. Make note on section "11.8 Modules": p277,ld12-ld17
ANSI specifies the constant
array-total-size-limit
to be a fixnum. An argument to
row-major-aref
can therefore be declared as such. Note so
at: p446,lu3
ANSI added a :print-object
keyword argument to
defstruct. Add to the bottom of p479:
:print-object
This option is like the existing
:print-function
one and takes a function as the keyword's
argument. This function takes only the first two arguments described
in :print-function
. Only one of :print-object
,
:print-function
, or :type
can be used.
ANSI extends setf
to take a values
expression as the first argument. CLTL2 notes that a proposal to do so
was made. Note that it was accepted on p129,ld18-ld23.
ANSI specifies many functions which must have proper lists (non-dotted lists). Note that these functions must have proper lists:
p171 mapcar
p171 maplist
p171 mapc
p171 mapl
p171 mapcan
p171 mapcon
p242 get-properties
p418 append
(note: ANSI allows nconc
to take dotted lists)
p426 member
p426 member-if
p426 member-if-not
p427 adjoin
p428 union
p428 nunion
p429 intersection
p429 nintersection
p429 set-difference
p429 nset-difference
p430 set-exclusive-or
p430 nset-exclusive-or
p431 subsetp
ANSI supplies a new data type boolean with
members t
and nil
. Note so on bottom of p12 and
p41. Add index entry: "boolean type, 12,41" to: p983,c3,lu26
ANSI changed arguments to
make-load-form
and
make-load-form-saving-slots
. Change p659,ld16 to:
make-load-form object &key :environment
[Generic Function] and change p662,lu9 to:
make-load-form-saving-slots object &key :slots
:environment
[Function]
ANSI changed loop for/as - on end test from
endp
to atom
: p721,ld11
ANSI added IEEE conditions
floating-point-invalid-operation
and
floating-point-inexact
as subconditions of
arithmetic-error
. Note on bottom of p922.
ANSI added allocate-instance
a
new generic function. Add to bottom of p848:
allocate-instance class &rest initargs
[Generic function]
This generic function is like
make-instance
but does not initialize
slots.
Add index entry: "allocate-instance
generic
function, 848" to: p981,c2,ld22 p1024,c1,ld6
ANSI added array-displacement
a new
function. Add to bottom of p448: array-displacement array
[Function]
This returns two values. The first value is the array displaced
to and the second is the displacement. If array is not a displaced
array then array-displacement
returns the values nil and 0.
Add index entry: "array-displacement
function, 448"
to: p982,c1,lu1 p1019,c1,lu7
ANSI added constantly
a new function. Add
to bottom of p708: constantly object
[Function]
Returns a function that will always return the
object
. The returned function takes any number of arguments.
Add index entry: "constantly
function, 708" to:
p987,c3,ld32 p1020,c2,ld10
ANSI added define-symbol-macro
a new
macro. Add to bottom of p214: define-symbol-macro symbol
{form}
[Macro]
The symbol will act as a macro call. A single form constitutes the body of the expansion. The symbol cannot already be a special variable.
Add index entry: "define-symbol-function
macro, 214"
to: p989,c3,ld20 p1026,c1,lu13
ANSI added
ensure-directories-exist
a new function. Add to
bottom of p652: ensure-directories-exist file &key
:verbose
[Function]
If the directories of file do not exist then this function creates them returning two values, file and a second value true if the directories were created or nil if not.
Add index entry: "ensure-directories-exist
function, 652" to: p991,c3,ld4 p1020,c3,ld4
ANSI added lambda
a new macro. Add to
bottom of p708: lambda lambda-list [[ {declaration}* |
[doc-string]] {form}*
[Macro]
A dubious shortcut for (function (lambda ...))
or
#'(lambda ...)
.
ANSI added read-sequence
a new
function. Add to bottom of p576: read-sequence sequence
input-stream &key :start :end
[Function]
This function reads elements from input-stream
into
sequence
. The position of the first unchanged element of
sequence is returned.
Add index entry: "read-sequence
function, 576" to:
p1007,c2,ld22 p1022,c2,lu7
ANSI added write-sequence
a new
function. Add to bottom of p577: write-sequence sequence
output-stream &key :start :end
[Function]
This function writes elements of sequence
to
output-stream
.
Add index entry: "write-sequence
function, 577" to:
p1016,c2,ld30 p1023,c3,lu6
cCLan - Comprehensive Common Lisp Archive Network
Parallelling the way Perl has "CPAN," a comprehensive set of libraries and utilities, people are working on making a gradually ever-increasing set of CL tools and libraries available.
LIJOS: Lisp Implementation of the Java ObjectStream
LIJOS is a Lisp Implementation of the Java ObjectStream protocol. Specifically, it is an implementation, in Lisp, of the Java serializing ObjectStream protocol that supports the (de)serialization of Java objects into and from appropriately mapped Lisp objects.
CLOCC - Common Lisp Open Code Collection
It consists of sets of Common Lisp code that is "Debian Free" and which requires nothing outside of a CL implementation and perhaps other code that is part of CLOCC. (hosted at SourceForge )
An Eiffel-like scheme to validate that arguments to functions are being established as per "contract," for use with CL programs.
GTK 2.0 bindings for Common Lisp
MaiSQL - Common Lisp Interface Layer to SQL Databases such as PostgreSQL.
A CL to SQL database interface.
CLOS - Common Lisp Object System
Richard C. Water's SERIES package for Common Lisp
A series is a data structure much like a sequence, with similar kinds of operations. The difference is that in many situations, operations on series may be composed functionally and yet execute iteratively, without the need to construct intermediate series values explicitly. In this manner, series provide both the clarity of a functional programming style and the efficiency of an iterative programming style.
SERIES is the culmination of many years of design and use of this approach, during which some 100,000 lines of application code have been written (by about half a dozen people over the course of seven years) using the series facility in nearly all iteration situations. This includes one large system ( KBEmacs) of over 40,000 lines of code.
(hosted at SourceForge )
The classical language known for having a data/control structure similar to this is Icon, with its notion of generators. ML and Haskell also implement something similar with their lazy evaluation systems.
cl-glade - Glade Code Generator for Common Lisp
MatLisp - a CLOS package to handle matrices, interfacing to BLAS and LAPACK linear algebra code, or even the ATLAS optimized LAPACK libraries.
(hosted at SourceForge )
Lisp Server Pages (LSP) is a dynamic HTML generation facility that allows a page to be scripted with Common Lisp code fragments.
Trivial XML Parsing - using expat to transform XML and SGML into S-expressions usable by Common Lisp
I use this to transform Galeon bookmark files into DocBook form to integrate into my web site...
XMLS, a simple XML parser for Common Lisp
This provides a transformer that generates output similar to that provided by Pierre Mai's transformer...
SillyIRC - implemented in Common Lisp
Post Office (imap/pop/smtp) implemented in Common Lisp
SYSMAN - SNMP tools for Common Lisp
mk-defsystem
System Definition Utility for CL
(rather like Make for C)
Image processing and analysis for PC / Mac
Araneida is a web server implemented in Common Lisp using CMU/CL ; CLiki is implemented atop Araneida.
IMHO is a toolkit that provides a "loose functional equivalent of Apple's WebObjects framework." Works with CMU/CL .
BINARY-TYPES is a Common Lisp package for reading binary files to symbolic form.
PLOB - Persistent Lisp Objects
This system provides orthogonal persistency for Lisp objects using CLOS.
PLOB - Persistent Lisp Objects
This system provides orthogonal persistency for Lisp objects using CLOS.
db.lisp - CMUCL Interface to Berkeley DB
How to use CLISP as your login shell.
Behind the scenes, this is apparently implemented in Common Lisp...
Using the New Common Lisp Pretty Printer Some Useful Lisp Algorithms: Part 2
An assortment of utilities to do "Internet Stuff" in Common Lisp
An ASDF System is a collection of source files and a .asd file which tells asdf how to compile and load them. This document describes a proposed standard which asdf systems should comply with for a more consistent end-user experience, and outlines a preferred way in which a package management technology such as RPM or dpkg could be layered onto it
With this, you can build your own IVR (Interactive Voice Response) systems completely in Common Lisp. Everything runs under both Linux and Win32.
Macro for syntax for creating Perl-like hash tables in Common Lisp
Home of the CELLS
system, which is an
object extension for Common Lisp that provides similar functionality
to spreadsheets, where you can link functions in, and have states
recomputed automatically (including all dependancies) any time any
CELL-tracked object is modified.
CL-PPCRE - portable Perl-compatible regular expressions for Common Lisp
This apparently beats Perl's RE implementation when you run it atop CMUCL .
Web site that is written in Common Lisp ; extensive use made of macros...
Generates sexp descriptions of C headers
An email web archiving system providing static HTML views of an email archive.
A "lazy" extension to CL, which roughly
corresponds to Scheme's
delay
/force
operators.
An interface to interact with Amazon's S3 storage system.
A Lisp interface to memcache.
CL-MUPROC Erlang-inspired multiprocessing in Common Lisp (2008-02-17)
Albert is a Common Lisp doc-generator, comparable to Javadoc and Doxygen. Currently it generates DocBook.
There are a bunch of these; hopefully the interfaces may converge towards some common schemes that can be widely usable.
Socket Handling for Corman Lisp
This package is a small set of CLOS classes that wrap the WINSOCK package available at the Corman Lisp web site. It allows creation of server sockets and client sockets in a fairly easy to use manner. It requires the winsock.lisp file available from the Corman Lisp web site. Support for using sockets through a proxy server is part of the package.
Some interesting things have been implemented atop socket interfaces:
pg.el Emacs Lisp socket-level interface to the PostgreSQL RDBMS
Common Lisp socket-level interface to the PostgreSQL RDBMS
Compatible with socket implementations for CLISP, CMUCL, and ACL .
XML-RPC Library for Corman Lisp
Currently a "client-only" package...
An expert system shell based on CLIPS, this now works with many Common Lisp implementations
Common Lisp binding to GTK
This is a scheme used to allow extending CLOS to make it more powerful.