www.wikidata.de-de.nina.az
Dieser Artikel behandelt die Programmiersprache Zur Routing Architektur LISP siehe Locator Identifier Separation Protocol Lisp ist eine Familie von Programmiersprachen die 1958 erstmals spezifiziert wurde und am Massachusetts Institute of Technology MIT in Anlehnung an den ungetypten Lambda Kalkul entstand Es ist nach Fortran die zweitalteste Programmiersprache die noch verbreitet ist LispParadigmen multiparadigmatisch funktional prozedural manche Dialekte ausserdem modular objektorientiert reflexivErscheinungsjahr 1958Designer John McCarthyEntwickler Steve Russell Timothy P Hart Mike LevinTypisierung dynamischDialekte Common Lisp Scheme Emacs Lisp und viele weitereBeeinflusst von Lambda Kalkul Fortran IPLBeeinflusste Logo Perl Smalltalk Clojure Python RPL Ruby Dylan Mathematica REBOL Haskell Snap BYOBAuf Basis von Lisp entstanden zahlreiche Dialekte Zu den bekanntesten zahlen Common Lisp und Scheme Daher bezieht sich der Begriff Lisp oft auf die Sprachfamilie und nicht auf einen konkreten Dialekt oder eine konkrete Implementierung Inhaltsverzeichnis 1 Geschichte 2 Bedeutung 3 Syntax 4 Minimaler Funktionsumfang fur Lisp 5 Datentypen 6 Zitate 7 Lisp Dialekte 7 1 Historisch relevante Dialekte 7 2 Spater verbreitete Dialekte 7 3 Dialekte fur besondere Zwecke 7 4 Neuere Entwicklungen 8 Literatur 9 Weblinks 10 EinzelnachweiseGeschichte Bearbeiten nbsp Eine Lisp Maschine im MIT MuseumLisp steht fur List Processing Listen Verarbeitung Damit waren ursprunglich Fortran Unterprogramme gemeint mit denen symbolische Berechnungen durchgefuhrt werden sollten wie sie der Lambda Kalkul definiert Steve Russell einer der Studenten von John McCarthy kam dann auf die fundamentale Idee auf Grundlage dessen Formulierung eines Lisp Interpreters in Lisp einen Interpreter fur diese Ausdrucke fur die IBM 704 zu schreiben Damit war die Programmiersprache Lisp geboren Die Grunddatenstrukturen von Lisp sind Einzelwerte z B Symbole Zahlen Zeichenketten die Atome genannt werden und Cons Zellen aus denen Listen gebildet werden Die Listen konnen beliebig verschachtelt werden Listen von Listen Damit lassen sich auch leicht Datenstrukturen wie ein assoziatives Array implementieren Listen werden zur Darstellung in Lisp in runde Klammern gefasst A B C Auch Programmanweisungen sind verschachtelte Listen bei denen das jeweils erste Listenelement die auszufuhrende Funktion identifiziert Es gibt somit keinen grundsatzlichen Unterschied zwischen Daten und Programmen diese Eigenschaft wird Homoikonizitat genannt Der Programmierer kann so beispielsweise neue Kontrollstrukturen oder Objektsysteme OOP entwickeln Metaprogrammierung Makros Es ermoglicht aber auch Programmteile zur Laufzeit beliebig zu manipulieren Lisp bietet dem Programmierer grosse Flexibilitat und weitreichende Einflussmoglichkeiten 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 Garbage Collection Deklarationen fur Datentypen sind optional und ein Lisp Symbol kann als Variable fur beliebige Arten von Objekten stehen Viele dieser Eigenschaften sind im Laufe der Zeit in weitere Programmiersprachen ubernommen 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 ermoglichten das schnelle Ausfuhren von Lisp Programmen was auf damaligen allgemeinen Computern nur unter dem Verzicht auf Typuberprufung und automatische Speicherbereinigung moglich war Dies hat sich durch schnellere Computer jedoch geandert Programme in Lisp konnen interpretiert oder von einem Compiler in effizienten Code ubersetzt werden Typische Compiler sind Batch Compiler oder inkrementelle Compiler Inkrementelle Compiler konnen einzelne Ausdrucke ubersetzen Batch Compiler ubersetzen einzelne Lisp Dateien oder ganze Lisp Programme Compiler ubersetzen entweder in einen Bytecode fur eine virtuelle Maschine in andere Programmiersprachen oft in C fur die weitere Ubersetzung oder in Maschinencode fur einen Prozessor Das Akronym LISP wird manchmal scherzhaft als Lots of Irritating Superfluous Parentheses eine Menge lastiger uberflussiger Klammern interpretiert Bedeutung BearbeitenHistorisch gesehen gehort Lisp zusammen mit Prolog zu den wichtigsten Programmiersprachen der kunstlichen Intelligenz Durch Lisp ist erstmals der Lambda Kalkul zum Kern einer Programmiersprache gemacht worden Dieser ist ein wesentliches Element der Semantik vieler moderner Programmiersprachen 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 Vereinigten Staaten Lisp bzw einer seiner moderneren Dialekte wie Scheme die erste gelehrte Programmiersprache Das hatte einen grossen Einfluss da es sich bei den klassischen Vertretern der prozeduralen Sprachfamilien um Vertreter einer statischen Verarbeitungsweise von Daten handelt wahrend unter anderem Lisp ein strikt dynamisches Konzept vertritt Syntax BearbeitenLisp benutzt S Expressions als externes Format um sowohl Quelltext 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 einem oder mehreren eingeleitet Beispiele in Common Lisp 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 LISP Hallo Welt Programm princ Hello world terpri Mit terpri 1 erfolgt ein Zeilenumbruch Minimaler Funktionsumfang fur Lisp BearbeitenUm ein minimales Lisp System zu implementieren sind nur sehr wenige Operatoren und ein allgemeiner Mechanismus zur Funktionsdefinition notig Die folgenden Funktionen sind im ursprunglichen Bericht von McCarthy enthalten first gibt das erste Element einer Liste zuruck hiess ursprunglich car von Contents of Address Part of Register rest gibt die Restliste ohne das erste Element zuruck hiess ursprunglich cdr von Contents of Decrement Part of Register cons Erzeugt aus zwei Zeigern ein CONS Paar und gibt einen Zeiger auf dieses zuruck Kann zum Beispiel verwendet werden um ein Element an den Anfang einer Liste anzufugen von CONStruct quote verhindert die Auswertung des nachfolgenden Objekts eq Test auf Identitat zweier oder mehrerer Objekte cond bedingte Ausfuhrung Ubernimmt eine beliebig lange Liste von Paaren die jeweils aus einer Bedingung und einer Berechnungsvorschrift bestehen Gibt das Auswertungsergebnis der ersten Berechnungsvorschrift zuruck deren zugehorige Bedingung wahr ist Mechanismus zur Funktionsdefinition a href Anonyme Funktion html title Anonyme Funktion lambda a Bereits mit diesen Sprachmitteln kann ein bemerkenswerter Teil der Funktionen die ubliche Lisp Systeme mitbringen definiert werden Datentypen BearbeitenIn der Originalversion von Lisp gab es zwei grundsatzliche Datentypen Atome und Listen Atome hiessen so weil sie nicht verandert werden konnten Listen waren Sequenzen von Elementen wobei diese Elemente Atome oder Unterlisten sein konnten Ein Atom war entweder eine Zahl oder ein Symbol Ein Symbol war eine alphanumerische Zeichenkette die als Variablenname oder Datenelement beim symbolischen Rechnen verwendet wurde Intern wurde ein Symbol Atom nur einmal in der Symboltabelle abgespeichert Zwei Symbolatome die gleich geschrieben wurden und an verschiedenen Stellen im Quelltext vorkamen reprasentierten dasselbe Objekt Spater wurden in den Lisp Dialekten weitere Datentypen eingefuhrt und das Konzept der Lisp Atome verlor an Bedeutung Zitate Bearbeiten Lisp is a programmable programming language Lisp ist eine programmierbare Programmiersprache John Foderaro CACM September 1991 2 Lisp seems to be a lucky discovery of a local maximum in the space of programming languages Lisp scheint die gluckliche Entdeckung eines lokalen Maximums in der Menge der Programmiersprachen zu sein John McCarthy Let Over LambdaLisp Dialekte BearbeitenHistorisch relevante Dialekte Bearbeiten LISP 1 5 war die erste Lisp Version die uber das MIT hinaus verbreitet wurde und enthalt die erste funktionsfahige Quelle einer Lispimplementierung Maclisp war ein weit verbreiteter und einflussreicher Vorlaufer von Common Lisp und die ursprungliche Implementationssprache des Computeralgebrasystems Macsyma InterLisp entwickelte sich ab 1967 aus BBN Lisp und wurde zu Interlisp D weiterentwickelt das ein komplettes Entwicklungssystem fur 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 fur ihre Pionierarbeit an InterLisp ZetaLisp auch Lisp Machine Lisp genannt ist eine Weiterentwicklung von Maclisp und lief auf verschiedenen Lisp Maschinen Auf Basis dieses Dialekts wurde Flavors die erste objektorientierte Erweiterung entwickelt Franz Lisp wurde 1978 aus MacLisp entwickelt um auf einer VAX das Computeralgebrasystem Macsyma laufen zu lassen Es fand weite Verbreitung weil es mit BSD Unix ausgeliefert wurde Spater wurde die Firma Franz Inc gegrundet 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 schwacheren Computern lief Eine bekannte Anwendung ist das Statistikpaket XLispStat EuLisp war ein europaischer Versuch ein aufgeraumtes und einheitliches Lisp zu definieren ISLisp ist ein ISO standardisierter kompakter Lisp Dialekt der sich fur die Programmierung eingebetteter Systeme eignet Portable Standard Lisp und das sogenannte Standard Lisp wurden ab 1980 an der University of Utah entwickelt und vor allem fur das Computeralgebrasystem Reduce genutzt Darin war es in einer ALGOL artigen Syntax als Skriptsprache RLISP nutzbar S 1 Lisp war ein Lisp fur den Supercomputer S 1 Mark IIA Spater verbreitete Dialekte Bearbeiten Common Lisp ist der umfangreichste und in der Praxis am haufigsten eingesetzte Lisp Dialekt Er ist ANSI standardisiert und bietet Unterstutzung fur prozedurale Makros lexikalische wie dynamische Variablenbindung und vieles mehr Der Name erinnert an die Absicht mehrere inkompatible Bestrebungen zu vereinigen einen Nachfolger fur Maclisp zu finden ZetaLisp Spice Lisp NIL und S 1 Lisp Weitere Einflusse waren InterLisp und Scheme Scheme ist eine minimale und elegante Variante die u a Continuations unterstutzt Im Gegensatz zu Common Lisp kennt sie nur lexikalische Variablenbindung und hygienische Makros Sie findet aufgrund ihrer Einfachheit haufig in der Lehre Gebrauch obgleich auch produktive Programmierung mit ihr moglich ist und praktiziert wird Clojure ist ein Lisp Dialekt der auf der Java Virtual Machine lauft und Interoperabilitat zu Java bietet Emacs Lisp ist die Skriptsprache des Texteditors GNU Emacs Dialekte fur besondere Zwecke Bearbeiten AutoLISP ist die auf einer fruhen Version von XLISP basierende Skriptsprache fur das CAD System AutoCAD librep oder kurz rep ist eine Skriptsprache fur unixartige Systeme und orientierte sich anfangs an Emacs Lisp hat aber lexikalische statt dynamischer Variablenbindung Der Fenstermanager Sawfish wurde in rep geschrieben muLISP lauft unter CP M und MS DOS sowie auf einigen programmierbaren Taschenrechnern Es wurde benutzt um das Computeralgebrasystem Derive zu implementieren Nyquist ist eine Sprache fur Klangsynthese und analyse und basiert auf XLISP Racket ist ein vorrangig fur die Entwicklung von Programmiersprachen konzipierter Scheme Dialekt RPL lauft auf programmierbaren Taschenrechnern insbesondere auf solchen von 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 objekt und ereignisorientierten Programmierung Sie enthalt APIs fur X Motif CMIS und weitere Neuere Entwicklungen Bearbeiten Arc ist ein von Paul Graham und Robert Morris entwickelter Dialekt 3 NewLISP ist eine Skriptsprache 4 Hy ist ein Lisp Dialekt der eng mit Python verzahnt ist lfe ist ein Lisp Dialekt fur die Erlang VM 5 Literatur BearbeitenJohn McCarthy LIPS 1 5 Programmer s Manual The MIT Press Cambridge Mass 1962 106 S Anthony C Hearn Standard LISP University Stanford Calif 1969 Walter Sonnenberg Anwendung von Lisp zur Definition und Implementierung Algolahnlicher Programmiersprachen Universitat Karlsruhe 1970 John McCarthy Carolyn L Talcott Hrsg LISP Programming and proving Stanford University Stanford 1978 Herbert Stoyan LISP Programmierhandbuch Eine Sprache fur die nichtnumerische Informationsverarbeitung Akademie Verlag Berlin 1978 208 S John Allen Anatomy of Lisp McGraw Hill 1978 ISBN 0 07 001115 X Herbert Stoyan LISP Anwendungsgebiete Grundbegriffe Geschichte Akademie Verlag Berlin 1980 480 S Herbert Stoyan Gunther Gorz Hrsg LISP Eine Einfuhrung in die Programmierung Springer Berlin 1984 ISBN 3 540 13158 2 358 S Patrick Henry Winston Berthold Horn Lisp Addison Wesley Verlag 1987 ISBN 3 925118 61 6 Harold Abelson Gerald Jay Sussman Structure and Interpretation of Computer Programs SICP MIT Press 1993 ISBN 978 0 262 01153 2 Christian Queinnec Lisp in Small Pieces Cambridge University Press 2003 ISBN 0 521 54566 8 Weblinks BearbeitenLisp 1 5 Programmer s Manual PDF 4 5 MB John McCarthy Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I PDF 214 kB Eine konzise Einfuhrung in Anlehnung an McCarthys Arbeit PostScript Paul McJones Hrsg History of LISP der Software Preservation Group am Computer History Museum Paul Graham The Roots of Lisp PDF 141 kB ELM ART ein interaktives Lernprogramm zur Einfuhrung in die Programmiersprache Lisp Guy L Steele Jr amp Richard P Gabriel The Evolution of Lisp PDF 996 kB Lisp Die Mutter aller Programmiersprachen CRE 01 35 27hEinzelnachweise Bearbeiten Foldoc Jargon File Herkunft des Schlusselworts terpri Abgerufen am 2 Dezember 2010 Lisp is a Chameleon paulgraham com Arc Forum abgerufen am 6 November 2016 About newLISP lisp flavoured erlang Abgerufen am 7 Juli 2019 Normdaten Sachbegriff GND 4035918 9 lobid OGND AKS LCCN sh85077449 Abgerufen von https de wikipedia org w index php title Lisp amp oldid 234219284