Common Lisp

Extensible from the Inside-Out

Image for: Extensible from the Inside-Out

Part of what makes Lisp distinctive is that it is designed to evolve. As new abstractions become popular (object-oriented programming, for example), it always turns out to be easy to implement them in Lisp. Like DNA, such a language does not go out of style.

Paul Graham, ANSI Common Lisp

An example of SxQL, a macro-based SQL DSL

(select (:title :author :year)
  (from :books)
  (where (:and (:>= :year 1995)
               (:< :year 2010)))
  (order-by (:desc :year)))

⇒ ((:title "Practical Common Lisp"
    :author "Peter Seibel"
    :year 2005)
   (:title "ANSI Common Lisp"
    :author "Paul Graham"
    :year 1995))

Mature & Stable

Image for: Mature & Stable

An extensive standard provides a rock-solid foundation that you can confidently build upon. You won't be reinventing the same old wheels ten years from now.

Functional

Image for: Functional
Functions are first class objects: you can pass them around, store them, call them dynamically. Build your application by composing small, functional building blocks.
(reduce #'-
        (reverse (list 1 2 3)))
⇒ 0

(mapcar #'string-downcase
        (list "Hello" "world!"))
=> ("hello" "world!")

Object-Oriented

Image for: Object-Oriented
Build reusable and extensible class hierarchies using the Common Lisp Object System. Design patterns disappear as you adapt the language to your problem domain.
(defclass book ()
  ((title :reader book-title
          :initarg :title)
   (author :reader book-author
           :initarg :author))
  (:documentation "Describes a book."))

(make-instance 'book
               :title "ANSI Common Lisp"
               :author "Paul Graham")

Fast

Image for: Fast
Requests per second using Woo, an HTTP server written in pure Common Lisp.

Great Tools

Image for: Great Tools

SLIME, an IDE that leverages the power of Common Lisp and the extensibility of Emacs, provides a development environment ahead of anything else.

You can leave the write-compile-debug cycle behind. Everything is interactive: try your code on the REPL as you write it, and a powerful debugger lets you inspect trees of live values, or rewind the stack to undo an exception.

Start here