Common Lisp, häufig abgekürzt CL, ist ein standardisierter Dialekt der Programmiersprache Lisp. Common Lisp ist keine Implementierung sondern eine Spezifikation zu der sowohl kommerzielle als auch Open-Source Implementationen existieren. Die Sprache Common Lisp ist seit dem 8. Dezember 1994 offizieller American National Standards Institute Standard (ANSI/X3.226-1994) und somit die erste standardisierte objektorientierte Programmiersprache.
Common Lisp ist eine Allzweckprogrammiersprache im Gegensatz zu den Lisp-Dialekten Emacs Lisp und AutoLISP, welche nur eingebettete Erweiterungssprachen für bestimmte Programme darstellen. Common Lisp und Scheme benutzen im Gegensatz zu vielen älteren Dialekten (wie MacLisp oder ZetaLisp) lexikalischen Gültigkeitsbereich (lexical scope) für Variablen.
Common Lisp ist eine Multiparadigmensprache, die
- sowohl imperatives, funktionales und objekt-orientiertes Programmieren unterstützt.
- mittels optionaler Typdeklarationen effizient kompiliert werden kann.
- durch standardisierte Sprachelemente wie z.B. Lisp-Makros (Neuanordnung von Code zur Kompilierzeit durch das Programm selbst) und Reader-Makros (Syntaxerweiterungen, die bestimmten Zeichen neue Bedeutungen geben) erweitert werden kann.
Syntax
Common Lisp ist ein Lisp; es nutzt also S-Expressions, um sowohl Code als auch Daten darzustellen. Funktions- und Makroaufrufe werden als Listen geschrieben, die als erstes Element den Namen der Funktion bzw. des Makros enthalten:
;; Addiere 2 und 2 (+ 2 2)
;; Setze die Variable p auf 3.1415 (setf p 3.1415)
;; Eine Funktion, die ihr Argument quadriert (defun square (x) (* x x))
;; Quadriere 3 (square 3)
Datentypen
Common Lisp unterstützt eine Vielzahl von Datentypen, mehr als viele andere Sprachen. Diese Typen sind hierarchisch angeordnet.
Skalare Typen
Zahlen in Common Lisp sind vom Typ number. Untertypen von number sind u.a. integer (Ganzzahlen), ratio (rationale Zahlen bzw. Brüche), real (Fließkommazahlen) und complex (komplexe Zahlen). Arithmetik mit Ganzzahlen und Brüchen ist beliebig genau. Eine Klasse von Programmfehlern in Sprachen wie C, die durch überlaufende Ganzzahlen verursacht werden, ist in Common Lisp somit praktisch ausgeschlossen.
Der Common Lisp character-Typ ist nicht auf ASCII beschränkt, was nicht überrascht, da Lisp älter als ASCII ist. Viele Implementationen unterstützen Unicode, siehe [1] (englisch).
Der Typ symbol ist ein besonderes Merkmal fast aller Lisp-Dialekte, aber in anderen Sprachfamilien größtenteils unbekannt. Ein Symbol in Lisp ist ähnlich einem Bezeichner in anderen Sprachen, da es als Variable benutzt wird und einen Wert hat. Da sie aber Objekte erster Klasse sind, können sie auch zu anderen Zwecken benutzt werden.
Datenstrukturen
Common Lisp unterstützt u.a. Listen, Arrays, Hashtables.
Funktionen
In Common Lisp sind Funktionen normale Objekte, die als Parameter übergeben oder von einer Funktion zurückgegeben werden können. Dadurch können sehr allgemeine Operationen ausgedrückt werden.
Die Common Lisp Standardbibliothek benutzt solche Funktionen höherer Ordnung oft. Zum Beispiel nimmt die sort
-Funktioen einen Vergleichsoperator als Argument.
Implementierungen
Frei
- Armed Bear Lisp [2]
- CMUCL
- Embeddable Common Lisp [3]
- GNU Common Lisp
- CLISP
- Movitz [4]
- Jatha [5]
- OpenMCL [6]
- Steel Bank Common Lisp
Kommerziell
Weblinks
- Common Lisp HyperSpec (englisch) - Referenz
- Association of Lisp Users (englisch)
- Episodic Learner Model (deutsch/englisch) - Interaktives Tutorial
- Paul Grahams Lisp Seite (englisch)
- Peter Norvigs Webseite (englisch)
- CLOCC - the Common Lisp Open Code Collection
E-Books
- Common Lisp the Language, 2nd Edition (englisch)
- Practical Common Lisp (englisch)
- Common Lisp: A Gentle Introduction to Symbolic Computation (englisch)
- Common Lisp Cookbook (englisch)
- Successful Lisp: How to Understand and Use Common Lisp (englisch)