10.12.12 Lisp – Wikipedia Lisp

aus Wikipedia, der freien Enzyklopädie

Lisp ist eine Familie von Programmiersprachen, die 1958 erstmals spezifiziert wurde und am Massachusetts Institute Lisp of Technology (MIT) in Anlehnung an den Lambda-Kalkül Paradigmen: multiparadigmatisch: entstand. Es ist nach Fortran die zweitälteste funktional, prozedural; manche Programmiersprache, die noch verbreitet ist. Dialekte außerdem modular, objektorientiert, reflexiv Auf Basis von Lisp entstanden zahlreiche Dialekte. Zu den Erscheinungsjahr: 1958 bekanntesten zählen und Scheme. Daher Designer: John McCarthy bezieht sich der Begriff Lisp oft auf die Sprachfamilie und nicht auf einen konkreten Dialekt oder eine konkrete Entwickler: Steve Russell, Timothy P. Implementierung. Hart, Mike Levin Typisierung: dynamisch Dialekte: Common Lisp, Scheme, und viele weitere Inhaltsverzeichnis Beeinflusst von: Lambda-Kalkül, Fortran, IPL Beeinflusste: Logo, , Smalltalk, , 1 Geschichte Python, Ruby, Dylan, 2 Bedeutung Mathematica, REBOL, Haskell 3 Syntax 4 Minimaler Funktionsumfang für Lisp 5 Zitate 6 Lisp-Dialekte 6.1 Heute häufig verwendete Dialekte 6.2 Historisch relevante Dialekte 6.3 Dialekte für besondere Zwecke 6.4 Neuere Dialekte 7 Einzelnachweise 8 Literatur 9 Weblinks

Geschichte

Lisp steht für List Processing (Listen-Verarbeitung). Damit waren ursprünglich Fortran-Unterprogramme gemeint, mit denen symbolische Berechnungen durchgeführt werden sollten, wie sie im Lambda-Kalkül gebraucht werden. Steve Russell, einer der Studenten von John McCarthy, kam dann auf die fundamentale Idee, einen Interpreter für diese Ausdrücke zu programmieren, womit die Programmiersprache Lisp geboren war.

Die Grunddatenstrukturen von Lisp sind Einzelwerte (Skalarwerte), die Atome genannt werden, und Listen. Die Listen können beliebig verschachtelt werden (Listen von Listen). Damit lassen sich auch leicht Datenstrukturen wie ein assoziatives Array implementieren. Die Listen werden mit runden Klammern dargestellt:

(A B ) de.wikipedia.org/wiki/Lisp 1/6 10.12.12 Lisp – Wikipedia

Auch Programmanweisungen sind Listen, wobei das erste Listenelement die auszuführende Funktion identifiziert. Es gibt somit keinen grundsätzlichen Unterschied zwischen Daten und Programmanweisungen. Dies ermöglicht u. a., Programmteile zur Laufzeit beliebig zu manipulieren. Diese Eigenschaft wird Homoikonizität genannt. Der Programmierer kann so beispielsweise neue Kontrollstrukturen oder Objektsysteme (OOP) entwickeln (Metaprogrammierung, Makros).

Lisp bietet dem Programmierer große Flexibilität und weitreichende Einflussmöglichkeiten, weshalb es manchmal auch als programmierbare Programmiersprache bezeichnet wird. Datenstrukturen werden dynamisch aufgebaut, ohne dass der Programmierer explizit Speicherplatz reservieren oder freigeben muss (siehe auch automatische Speicherbereinigung). Deklarationen für Daten sind nicht nötig, und ein Lisp-Symbol kann als Variable beliebige Arten von Objekten bezeichnen. Viele dieser Eigenschaften sind im Laufe der Zeit in weitere Programmiersprachen übernommen worden. Anfang der 1960er waren sie jedoch ihrer Zeit weit voraus.

In den 1970er und 1980er Jahren wurden spezielle Lisp-Maschinen entwickelt und vertrieben. Diese ermöglichten das schnelle Ausführen von Lisp-Programmen, was auf damaligen allgemeinen Computern nur unter dem Verzicht von Typ-Überprüfung und automatische Speicherbereinigung möglich war. Dies hat sich durch schnellere Computer jedoch geändert.

Programme in Lisp können interpretiert oder von einem in effizienten Code übersetzt werden. Typische Compiler sind Batch- Compiler oder inkrementelle Compiler. Inkrementelle Compiler können einzelne Ausdrücke übersetzen. Batch-Compiler übersetzen einzelne Lisp-Dateien oder ganze Lisp-Programme. Compiler Eine Lisp-Maschine im MIT-Museum übersetzen entweder in einen Bytecode für eine virtuelle Maschine oder in Maschinencode für einen Prozessor.

Das Akronym LISP wird manchmal scherzhaft als „Lots of Irritating Superfluous Parentheses“ (eine Menge lästiger, überflüssiger Klammern) interpretiert. Bedeutung

Historisch gesehen ist Lisp zusammen mit Prolog eine der Programmiersprachen der künstlichen Intelligenz.

Im Unterschied zu Europa, wo Programmiersprachen wie Assembler, Fortran oder Pascal als klassische Vertreter der Familie der prozeduralen Programmiersprachen gelehrt wurden, war und ist zum Teil bis heute in den USA Lisp die erste gelehrte Programmiersprache. Das hatte einen großen Einfluss, da es sich bei den klassischen Vertretern der prozeduralen Sprachfamilien um Vertreter einer statischen Verarbeitungsweise von Daten handelt, während dagegen unter anderem Lisp ein strikt dynamisches Konzept vertritt. Syntax

Lisp benutzt S-Expressions als externes Format, um sowohl Source-Code als auch Daten darzustellen. Funktions- und Makroaufrufe werden als Listen geschrieben, die als erstes Element den Namen der Funktion bzw. des Makros enthalten. Kommentare werden mit ; eingeleitet.

Beispiele in Common Lisp: de.wikipedia.org/wiki/Lisp 2/6 10.12.12 Lisp – Wikipedia

;; Addiere 2 und 3 und 4: (+ 2 3 4)

;; Setze die Variable p auf den Wert 3,1415: (setf p 3.1415)

;; Definiere eine Funktion, die ihr Argument quadriert: (defun square (x) (* x x))

;; Quadriere die Zahl 3: (square 3)

[1] LISP-Hallo-Welt-Programm (Mit (terpri) erfolgt ein Zeilenumbruch ) :

(princ "Hello, world!") (terpri)

Minimaler Funktionsumfang für Lisp

Um ein minimales Lisp-System zu implementieren, sind nur sehr wenige Operatoren und ein allgemeiner Mechanismus zur Funktionsdefinition nötig. Die folgenden Funktionen sind im ursprünglichen Bericht von McCarthy enthalten:

first (gibt das erste Element einer Liste zurück; hieß ursprünglich car (von Contents of Address Register)) rest (gibt die Restliste (ohne das erste Element) zurück; hieß ursprünglich cdr (von Contents of Decrement Register)) cons (fügt ein Element am Anfang einer Liste an) (von CONStruct) quote (verhindert die Auswertung des nachfolgenden Objekts) eq (Test auf Identität) cond (bedingte Ausführung: wenn der erste Parameter ungleich NIL ausgewertet wird, wird der zweite Parameter ausgeführt, sonst der dritte) Mechanismus zur Funktionsdefinition lambda

Bereits mit diesen Sprachmitteln kann ein bemerkenswerter Teil der Funktionen, die übliche Lisp-Systeme mitbringen, definiert werden. Zitate

“Lisp is a programmable .”

„Lisp ist eine programmierbare Programmiersprache.“ [2] – JOHN FODERARO: CACM, September 1991

“Lisp seems to be a lucky discovery of a local maximum in the space of programming languages.”

„Lisp scheint die glückliche Entdeckung eines lokalen Maximums in der Menge der Programmiersprachen zu sein.“ – JOHN MCCARTHY: Let Over Lambda (http://letoverlambda.com/index.cl/guest/chap1.html)

de.wikipedia.org/wiki/Lisp 3/6 10.12.12 Lisp – Wikipedia Lisp-Dialekte

Heute häufig verwendete Dialekte

Common Lisp ist der umfangreichste und in der Praxis am häufigsten eingesetzte Lisp-Dialekt. Er ist ANSI-standardisiert und bietet Unterstützung für prozedurale Makros, lexikalische wie dynamische Variablenbindung und vieles mehr. Der Name erinnert an die Absicht, mehrere inkompatible Bestrebungen zu vereinigen, einen Nachfolger für zu finden (ZetaLisp, , NIL und S-1 Lisp). Weitere Einflüsse waren und Scheme. Scheme ist eine minimale und elegante Variante, die u. a. Continuations unterstützt. Im Gegensatz zu Common Lisp kennt sie nur lexikalische Variablenbindung und hygienische Makros. Sie findet aufgrund ihrer Einfachheit häufig in der Lehre Gebrauch, obgleich auch produktive Programmierung mit ihr möglich ist und praktiziert wird. Emacs Lisp ist die Skriptsprache des Texteditors GNU Emacs.

Historisch relevante Dialekte

LISP 1.5 war die erste Lisp-Version, die über das MIT hinaus verbreitet wurde und enthält die erste funktionsfähige Quelle einer Lispimplementierung. Maclisp war ein weit verbreiteter und einflussreicher Vorläufer von Common Lisp und die ursprüngliche Implementationssprache des Computeralgebrasystems Macsyma. InterLisp entwickelte sich ab 1967 aus BBN-Lisp und wurde zu Interlisp-D weiterentwickelt, das ein komplettes Entwicklungssystem für die Lisp-Maschine Xerox Dolphin bildete. 1992 verlieh die ACM den Software System Award an Daniel G. Bobrow, Richard R. Burton, L. Peter Deutsch, Ronald Kaplan, Larry Masinter und Warren Teitelman für ihre Pionierarbeit an Interlisp. ZetaLisp (auch genannt) ist eine Weiterentwicklung von MacLisp und lief auf verschiedenen Lisp-Maschinen. Auf Basis dieses Dialekts wurde Flavors, die erste objektorientierte Erweiterung entwickelt. wurde 1978 aus MacLisp entwickelt, um auf einer VAX das Computeralgebrasystem Macsyma laufen zu lassen. Es fand weite Verbreitung, weil es mit BSD ausgeliefert wurde. Später wurde die Firma Franz Inc. gegründet, um dieses Lisp zu pflegen. Seit Mitte der 80er Jahre verkauft Franz Inc. aber eine Common-Lisp-Implementierung (Allegro CL). XLISP ist ein LISP mit objektorientierten Erweiterungen, das auch auf schwächeren Computern lief. Eine bekannte Anwendung ist das Statistikpaket XLispStat. EuLisp war ein europäischer Versuch, ein aufgeräumtes und einheitliches Lisp zu definieren. ISLisp ist ein ISO-standardisierter, kompakter Lisp-Dialekt, der sich für die Programmierung eingebetteter Systeme eignet. und das sogenannte Standard Lisp wurden ab 1980 an der University of Utah entwickelt und v. a. für das Computeralgebrasystem Reduce genutzt. Darin war es in einer ALGOL- artigen Syntax als Skriptsprache RLISP nutzbar. S-1 Lisp war ein Lisp für den Supercomputer S-1 Mark IIA.

Dialekte für besondere Zwecke

AutoLISP ist die auf einer frühen Version von XLISP basierende Skriptsprache für das CAD-System AutoCAD. librep oder kurz rep ist eine Skriptsprache für unixartige Systeme und orientierte sich anfangs an Emacs Lisp, hat aber lexikalische statt dynamischer Variablenbindung. Der Fenstermanager Sawfish wurde in de.wikipedia.org/wiki/Lisp 4/6 10.12.12 Lisp – Wikipedia rep geschrieben. muLISP läuft unter CP/M und MS-DOS sowie auf einigen programmierbaren Taschenrechnern. Es wurde benutzt, um das Computeralgebrasystem Derive zu implementieren. Nyquist ist eine Sprache für Klangsynthese und -Analyse und basiert auf XLISP. RPL läuft auf programmierbaren Taschenrechnern (Vor allem Hewlett-Packard). Es handelt sich dabei um eine LISP-Version, die mit der Umgekehrten Polnischen Notation vermischt wurde. System Management Language ist erweitert um Sprachstrukturen zur objektorientierten und ereignisorientierten Programmierung. Sie enthält APIs zu CMIP, X/Motif, CMIS und weitere.

Neuere Dialekte

arc ist eine neue Programmiersprache (freigegeben am 29. Januar 2008) von . Clojure ist ein neuer Lisp-Dialekt für die Java Virtual Machine und inkompatibel zu anderen Lisp- Dialekten und -Standards. NewLISP (primär Skriptsprache[3]) Einzelnachweise

1. Foldoc Jargon File: Herkunft des Schlüsselworts terpri (http://foldoc.org/terpri) . Abgerufen am 2. Dezember 2010. 2. Lisp is a Chameleon (http://www.paulgraham.com/chameleon.html) 3. About newLISP (http://www.newlisp.org/index.cgi?FAQ) Literatur

John Allen: Anatomy of Lisp, McGraw-Hill, 1978, ISBN 0-07-001115-X Christian Queinnec: Lisp in Small Pieces, Cambridge University Press, 2003, ISBN 0-521-54566-8 Patrick Henry Winston, Berthold Klaus Paul Horn: Lisp, Addison-Wesley Verlag, 1987, ISBN 3- 925118-61-6 Walter Sonnenberg: Anwendung von Lisp zur Definition und Implementierung Algolähnlicher Programmiersprachen. Universität Karlsruhe 1970. Paul Graham: (http://www.paulgraham.com/onlisp.html) , Prentice Hall 1993, ISBN 0-13- 030552-9 Harold Abelson: "Structure and Interpretation of Computer Programs" (SICP), MIT Press, 1993, ISBN 978-0-262-01153-2 Weblinks

John McCarthys Originalarbeit über Lisp (http://www-formal.stanford.edu/jmc/recursive.html) Herbert Stoyans Lisp-Seiten (http://www8.informatik.uni-erlangen.de/IMMD8/html/lisp-enter.html) (Geschichte, Personen, Bibliographie, sehr ausführlich) Eine konzise Einführung in Anlehnung an McCarthys Arbeit (http://www.paulgraham.com/lib/paulgraham/jmc.ps) Association of Lisp Users (http://www.lisp.org/alu/home) (englisch) Chaosradio Express "Lisp Die Mutter aller Programmiersprachen" 01:35:27h (http://cre.fm/cre084) "Structure and Interpretation of Computer Programs" (SICP web site) (http://mitpress.mit.edu/sicp)

Von „http://de.wikipedia.org/w/index.php?title=Lisp&oldid=110797746“ de.wikipedia.org/wiki/Lisp 5/6 Kategorien: Lisp Funktionale Programmiersprache

Diese Seite wurde zuletzt am 22. November 2012 um 13:14 Uhr geändert. Abrufstatistik

Der Text ist unter der Lizenz „Creative Commons Attribution/Share Alike“ verfügbar; zusätzliche Bedingungen können anwendbar sein. Einzelheiten sind in den Nutzungsbedingungen beschrieben. Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.