Land of Lisp - beck-shop.de · PDF file19 Über den Autor Conrad Barski lebt in den USA in...

14
mitp Professional Land of Lisp Lisp-Programmierung einfach lernen und originelle Spiele programmieren von Conrad Barski 1. Auflage Land of Lisp – Barski schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG Thematische Gliederung: Funktionale, logische, parallele und visuelle Programmierung mitp/bhv 2011 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 8266 9163 8 Inhaltsverzeichnis: Land of Lisp – Barski

Transcript of Land of Lisp - beck-shop.de · PDF file19 Über den Autor Conrad Barski lebt in den USA in...

Conrad Barski

Außerdem bei mitp:

Sie lernen:

• die Eigenheiten der Syntax und Semantik von Lisp meistern

• kompakte und elegante funktionale Programme schreiben

• Makros programmie-ren und damit Domain-spezifische Sprachen erstellen

• einen eigenen Web-server erstellen und damit browserbasierte Spiele spielen

• mit Ihren Lisp-Fähig-keiten Spiele wie Dice of Doom oder Orc Battle programmie-ren, die ihre Hirnwin-dungen in Wallung bringen

• andere fortgeschrit-tene Lisp-Techniken einsetzen

Lisp wird als eine der mächtigsten Program-miersprachen der Welt gepriesen, aber ihre kryptische Syntax und ihre akademische Aura reichen aus, um selbst erfahrene Programmierer abzuschrecken. Diese dunklen Zeiten sind nun vorbei – Land of Lisp macht die Leistungsstärke der funktionalen Programmierung endlich allen leicht zugänglich.

Mit seinen brillant schrägen Comics und seinen überirdischen Spielprogrammen führt Sie der langjährige Lisper Conrad Barski in die Mysterien von Lisp ein. Sie beginnen mit den Grundlagen: der Manipulation von Listen, Input/Output und Rekursion. Dann werden die Themen komplexer: Makros, Programmierung höherer Ordnung und Domain-spezifische Sprachen. Action-geladene Comics gewähren Ihren glühenden Neuronen zwischendurch erholsame Auszeiten!

Auf Ihrem Weg zum Lisp-Kenner programmieren und spielen Sie verschiedene Computerspiele: Wizard‘s Adventure, ein von Whiskyschwaden durchnebeltes Text-Adventure, Grand Theft Wumpus, die gewalttätigste Hunt-the-Wumpus-Version, die die Welt je gesehen hat, und Dice of Doom, ein Strategiespiel gegen eine kaum zu schlagende Künstliche Intelligenz.

Dieses Buch zeigt, dass Lisp Ihnen Einsichten in die Computerprogrammierung vermittelt, die so tiefgreifend sind, dass jeder ernsthafte Program-mierer Erfahrungen mit dieser ungewöhnlichen Sprache sammeln sollte. Wenn Sie Lisp erst ein-mal verstanden haben, werden Sie für immer ein anderer Programmierer sein, selbst wenn Sie in Ihrem Leben nie wieder Lisp schreiben sollten.

Mit Land of Lisp halten Sie die Macht der funk-tionalen Programmierung in Ihren Händen.

ISBN 978-3-8266-9103-4

(D) €

34

,95

ISBN 978-3-8266-9163-8ISBN 978-3-8266-9163-8

Bars

kiLa

nd o

f Lis

p

Arduino Praxiseinstieg – Softcover 170 x 240 mm – Reihe: Programmierung

25 mm

ISBN 978-3-8266-5885-3

ISBN 978-3-8266-9080-8

In Kooperation mit:

Lisp-Programmierung einfach lernen und originelle Spiele entwickeln

19

Über den Autor

Conrad Barski lebt in den USA in Washington, D.C. Er hat einen M.D. der University ofMiami und fast 20 Jahre Programmiererfahrung. Unter anderem hat er ein obskures Atari-Jaguar-Spiel entwickelt und an vielen Entwicklungsprojekten für medizinische Softwaremitgearbeitet. Außerdem zeichnet Barski begeistert Cartoons. Unter anderem stammendas Lisp-Maskottchen und viele grafische Tutorials aus seiner Feder. Gegenwärtig entwi-ckelt er kardiologische Software.

Danksagungen

Zuallererst möchte ich meiner Frau Lauren danken, dass sie mir so viele Wochenendenfreigegeben hat, damit ich an diesem Buchprojekt arbeiten konnte. Besonders danke ichauch Philip Fominykh, dem Fachlektor dieses Buches, dessen umfangreiche Erfahrungund stilsicherer Umgang mit Common Lisp mir in vielen Diskussionen über die Philoso-phie von Lisp half, viele (aber nicht zu viele) Eigenarten im Quellcode auszubügeln. Außer-dem schulde ich Heow Eide-Goodman Dank, der die letzten Kapitel begutachtete und mirhalf, das Projekt abzuschließen.

Viele Mitarbeiter von No Starch Press mussten sich mit der eigenartigen Prosa und Strukturdieses Buches herumschlagen, um es in eine veröffentlichungsfähige Form zu bringen.Zuerst und allen voran danke ich Keith Fancher, dem Hauptlektor für den größten Teil die-ses Projekt. Wesentliche Beiträge wurden auch von Bill Pollock, Serena Young, Ansel Stan-ton, Riley Hoffman, Alison Petersen, Magnolia Molcan, Kathleen Mish, Don Marti, TylerOrtma und Adam Wright geleistet. Ich danke auch Aaron Feng für sein frühes Feedbackhinsichtlich des Stils des Buches.

Dieses Buchprojekt startete ursprünglich als Erweiterung meines Web-Tutorials »CastingSPELs in Lisp«. Ich möchte allen danken, die mir eine E-Mail geschickt haben und mirdabei halfen, mein Verständnis von Lisp zu vertiefen. Insbesondere lieferte mir rms(Richard Stallman) viel Feedback über den Stil von Lisp und half mir, die Emacs-Lisp-Ver-sion des Tutorials zu verfassen. Bitte ziehen Sie in Erwägung, die Free Software Foundation(FSF; (http://www.fsf.org) mit einer Spende zu unterstützen. Stallman gründete dieseNon-Profit-Organisation, um die Entwicklung von Open-Source- und kostenloser (»freier«)Software zu unterstützen, die auch zahlreiche großartige Lisp-Werkzeuge umfasst. JamesWebb unterstützte mich ebenfalls maßgeblich beim Verfassen der Emacs-Lisp-Version.Und von den ungezählten Leuten, die mir Feedback gaben und/oder halfen, Bugs in »Cas-ting SPELs in Lisp« zu beseitigen, möchte ich besonders Kenny Tilton, Marshall Quander,Wie-Ju, Chjristopher Brown, Stephen Gravrock, Paul Schulz, Andy Cowell und Johan Bock-gård hervorheben.

21

Einführung

Sie haben also ein Buch über Lisp in die Hand genommen und lesen seine Einführung.Vielleicht waren Sie überrascht – ein Comicbuch neben anderen Büchern über die Compu-terprogrammierung in einem Regal? Wer würde sich die Mühe machen, ein Comicbuchüber eine sonderbare akademische Programmiersprache wie Lisp zu schreiben? Vielleichthaben Sie gehört, wie andere Leute von Lisp geschwärmt haben und gedacht: »Was dieLeute über Lisp sagen, hört sich ganz anders an als das Gerede über andere Sprachen. Viel-leicht sollte ich mal ein Lisp-Buch lesen.« Wie auch immer: Sie halten gerade ein Buch übereine Programmiersprache in der Hand, die nicht nur sehr cool, sondern auch sehr unge-wöhnlich ist.

Warum ist Lisp so cool und einzigartig?

Lisp ist eine sehr ausdrucksstarke Sprache. Sie ist so konzipiert, dass Sie die kompliziertes-ten Programmierkonzepte klar und problemgerecht ausdrücken können. Lisper könnenein Programm genau so schreiben, wie es für die Lösung jedes anstehenden Problems amsachdienlichsten ist.

Das Maß an Kontrolle beim Schreiben von Lisp-Code ist das Alleinstellungsmerkmal vonLisp. Wenn Sie Lisp erst einmal verstanden haben, werden Sie für immer ein anderer Pro-grammierer sein. Selbst wenn Sie in Ihrem Leben nie wieder Lisp-Code schreiben sollten,wird Lisp Ihr Dasein als Coder grundlegend verändern.

Eine typische Programmiersprache zu lernen, ähnelt in gewisser Weise dem Erlernen einerFremdsprache als Erwachsener. Angenommen, Sie wollten Französisch lernen. Sie können

Einführung

22

jeden verfügbaren Französischkurs belegen, nur noch französische Texte lesen oder sogarnach Frankreich ziehen. Doch egal, was Sie tun, Sie werden Französisch niemals hundert-prozentig perfekt beherrschen. Und egal, wie gut Sie einmal Französisch sprechen werden,Sie werden wahrscheinlich immer noch in Ihrer Muttersprache träumen.

Bei Lisp ist das anders. Es ist nicht dasselbe wie das Erlernen irgendeiner Fremdsprache.Wenn Sie Lisp gelernt haben, werden Sie sogar in Lisp träumen. Lisp ist als Konzept derartleistungsstark, dass es Ihre früheren Programmiererfahrungen verdrängen und zu Ihrerneuen Muttersprache werden wird! Wann immer Sie einem neuen Programmierkonzept inirgendeiner Sprache begegnen werden, werden Sie sich zukünftig denken: »So etwa würdeich das in Lisp lösen, außer ...« Diese Fähigkeit kann Ihnen nur Lisp vermitteln.

Im Moment wissen Sie über Lisp vielleicht nur, dass wenigstens eine Person (ich) außeror-dentlich von dieser Sprache angetan ist. Aber Ihre Zeit ist wertvoll – und etwas Neues zulernen, erfordert nun einmal einige Mühe.

Die gute Nachricht ist, dass Lisp nicht wirklich so schwierig ist, wie es auf den ersten Blickscheinen mag. Beispielsweise sehen Sie hier einen gültigen Lisp-Ausdruck:

Können Sie den Wert dieses Ausdrucks erraten? Wenn Sie 11 geantwortet haben, wissenSie bereits, wie man einfachen Lisp-Code liest. Er hat die Form mathematischer Ausdrücke,außer dass die Funktionen – hier Addition und Multiplikation – vor die Zahlen gesetzt undalles in runde Klammern eingeschlossen wird.

Wenn Lisp so großartig ist, warum verwenden es nicht mehr Menschen?

Tatsächlich verwenden ziemlich viele große Unternehmen Lisp zur Lösung wichtiger Pro-bleme. (Eine lange Liste industrieller Lisp-Projekte finden Sie unter http://snipurl.com/

(+ 3 (* 2 4))

Wenn Lisp so großartig ist, warum verwenden es nicht mehr Menschen?

23

e3lv9). Andere Programmiersprachen »borgen« laufend Funktionen von Lisp aus und prä-sentieren sie als die neusten und großartigsten Konzepte. Außerdem verwendet das Seman-tic Web, dem viele eine bedeutende Rolle für die Zukunft des Webs nachsagen, vieleWerkzeuge, die in Lisp geschrieben sind.

Deshalb hat Lisp sicher eine vielversprechende Zukunft. Dennoch könnten einige denken,dass Lisp zu lernen die Mühe nicht lohnt.

Wie ist Lisp zu dieser unverdienten Reputation gekommen?

Ich glaube, die Menschen lassen sich von einer Faustregel leiten, um zu entscheiden, wasim Leben zu lernen sich lohnt. Die meisten Menschen wollen sich Wissen aus einer dernachfolgend umschriebenen drei Kategorien aneignen:

� Das, was viele andere Menschen lernen (Infinitesimalrechnung, C++ usw.)

� Das, was leicht zu lernen ist (Hula-hoop, Ruby usw.)

� Das, was einen leicht erkennbaren Wert hat (etwa Atomphysik oder dieses lächerlichlaute Pfeifen mit zwei Fingern im Mund)

Lisp fällt in keine dieser Kategorien. Es ist weder so beliebt wie die Infinitesimalrechnung,noch besonders leicht zu lernen und auch nicht so offensichtlich wertvoll wie dieses Pfei-fen auf zwei Fingern. Würden wir diesen (normalerweise sehr vernünftigen) Faustregelnfolgen, würden wir daraus schließen, dass sich ein vernünftiger Mensch von Lisp fernhal-ten sollte. Doch bei Lisp werden wir diese Regeln missachten. Dieses Buch zeigt, dass LispIhnen Einsichten in die Computerprogrammierung vermittelt, die so tiefgreifend sind,dass jeder ernsthafte Programmierer Erfahrungen mit dieser ungewöhnlichen Sprachesammeln sollte, selbst wenn dies ein wenig Mühe erfordert.

Falls Sie immer noch nicht überzeugt sind, sollten Sie einen Blick in den Comic-Epilog amEnde des Buches werfen. Selbst wenn Sie im Moment noch nicht alles verstehen sollten,vermittelt er Ihnen ein Gefühl für die fortgeschrittenen Funktionen, die in Lisp zur Verfü-gung stehen und die Denkweise, die die Lisp-Programmierung von anderen Arten der Pro-grammierung unterscheidet.

Wie Lisp entstanden ist

Die Wurzeln der Familie der Lisp-Sprachen reichen weit zurück und ihre Geschichte unter-scheidet sich von der anderer Sprachen. Um den Punkt zu erreichen, an dem alles begann,müssen wir weit in der Zeit zurückreisen.

Anmerkung

Das Semantic Web basiert auf der Idee, einen Satz von Protokollen für Websites zu erstel-len, bei deren Befolgung Computer die »Bedeutung« von Informationen auf einer Web-seite verstehen können. Zu diesem Zweck sollen Webseiten mit besonderen Metadatenversehen werden, die mit Vokabularen verknüpft sind, welche von verschiedenen Web-sites gemeinsam genutzt werden können. Diese Metadaten werden normalerweise ineinem Format angegeben, das als Resource Description Framework, abgekürzt RDF,bezeichnet wird. Viele Werkzeuge für das Arbeiten mit Beschreibungslogik und RDF-Daten sind in Lisp geschrieben (z. B. RacerPro oder AllegroGraph).

Einführung

24

Vor langer Zeit (in den 1940er Jahren) war die Erde von einem gigantischen Ozean, demPanthalassischen Ozean, bedeckt, der eine einzige öde Landmasse, Pangäa, umschloss. Indieser lebensfeindlichen Umgebung entwickelten sich die ersten Computerprogramme.Sie waren in reiner Maschinensprache geschrieben (oder bestanden nur, wie man so sagt,aus »Einsen« und »Nullen«).

Diese Protosprachen waren eng an bestimmte Computersysteme gebunden, wie etwa denENIAC, den Zuse Z3 und andere mit Vakuumröhren betriebene Gerätschaften. Häufigwaren diese frühen Computer so primitiv, dass sie einfach durch das Umlegen von Kipp-schaltern oder Umstecken von Kabeln »programmiert« wurden, weil alle ihre Operationendurch bestimmte physische Konstellationen von Schaltern oder Kabeln kodiert waren.

In den dunklen Tagen dieser Protosprachen wurden zahlreiche Experimente mit verschie-denen Computerarchitekturen durchgeführt, was zu einer explosionsartigen Vermehrungverschiedener Computerbefehlssätze führte. Der Wettbewerb war erbittert. Die meistendieser primitiven Sprachexperimente wurden Opfer längst vergessener Kämpfe ums Über-leben. Während sie letztlich verschwanden, blühten andere auf.

Irgendwann erwarben Computer ihren eigenen internen Speicher, um Programme zu spei-chern. Außerdem wurden primitive Assembler entwickelt, mit denen Programme nicht mehrals Folgen von Einsen und Nullen, sondern in Textform geschrieben werden konnten. Zu die-sen Assembler-Sprachen gehörten Short Code, Arc Assembly oder EDSAC Initial Orders.

Assembler-Sprachen machten die Softwareentwicklung erheblich effizienter. Mit ihrerHilfe konnten die alten Assembler den vielen Räubern in diesem primordialen Ozean ent-kommen. Doch Assembler-Sprachen waren noch beträchtlich eingeschränkt. Sie warenimmer für den Befehlssatz eines bestimmten Prozessors geschrieben und konnten deshalbnicht auf andere Maschinenarchitekturen portiert werden. Die Programmiersprachenmussten sich entwickeln, um außerhalb der Grenzen des Befehlssatzes einer bestimmtenMaschine zu überleben.

In den 1950ern entstanden die ersten maschinenunabhängigen Programmiersprachen.Sprachen wie Autocode oder Information Processing Language errangen ihre Unabhängig-keit nicht nur dadurch, dass sie – bemühen wir zur Veranschaulichung einmal das Beispielder Evolution der Tierwelt – sozusagen Lungen und Beine ausbildeten, um neues Terrainerobern zu können, sondern auch durch neue Softwaregattungen wie etwa Compiler undInterpreter.

Mit Compilern und Interpretern konnten Computerprogramme jetzt in einer für den Men-schen verständlichen Syntax geschrieben werden. Ein Compiler übersetzt ein von Men-schen geschriebenes Computerprogramm automatisch in ein maschinenfreundlichesBinärformat, das der Computer ausführen kann. Dagegen führt ein Interpreter die Aktio-nen in einem von Menschen geschriebenen Computerprogramm direkt aus, ohne sie vor-her komplett in ein maschinenfreundliches Binärformat zu übersetzen.

Zum ersten Mal konnten Programmierer Sprachen verwenden, die dafür konzipiert wor-den waren, aus der Computerprogrammierung eine angenehme Tätigkeit zu machen, beider keine Arbeit auf der primitiven Stufe der Computerhardware erforderlich war. Dieseinterpretierten und kompilierten Programmiersprachen sind das, was wir heute als die ers-ten »echten« Programmiersprachen bezeichnen. Eine der beeindruckendsten frühen Spra-chen, FORTRAN (entwickelt 1957), fand auf verschiedenen Architekturen breiteUnterstützung und wird bis heute intensiv genutzt.

Wenn Lisp so großartig ist, warum verwenden es nicht mehr Menschen?

25

Bis zu diesem Punkt basierte das Design der meisten erfolgreichen Sprachen auf einer zen-tralen Idee: ein allgemeines Design und eine Syntax anzubieten, die das Programmierenfür Novizen so leicht verständlich wie möglich machten. Doch eine gute Programmierspra-che zu entwerfen, erwies sich als sehr schwierig. Deshalb sind die meisten dieser Sprachenwie FORTRAN, BASIC oder C in Wirklichkeit nur ein Konglomerat älterer Konzepte, vondenen jeweils Teile kopiert und in einer Weise zusammengeworfen wurden, dass wahreSchönheit dabei auf der Strecke blieb. Diese »wilden« Sprachen waren normalerweise nuroberflächlich leicht zu verwenden, dennoch durchstreiften sie auf der Suche nach leichterBeute jahrzehntelang die Dschungel.

Im Schatten dieser Furcht einflößenden Ungeheuer lauerte eine kleine, bescheidene undvollkommen andersartige Kreatur – meist vor allen Blicken verborgen, aber dennoch fastseit dem Moment präsent, an dem die allerersten maschinenunabhängigen Sprachen anLand gekrochen waren. Hierbei handelte es sich um Sprachen, die eine mathematischeSyntax wie etwa den Lambda-Kalkül verwendeten, der in den 1930er Jahren von Mathema-tikern entwickelt worden war.

Diese Sprachen kümmerten sich überhaupt nicht darum, ob sie »pragmatisch« oder »novi-zenfreundlich« waren. Sie waren hochintelligent und wollten die Grenzen des Designs vonSprachen ausweiten. Sie warfen Fragen nach der Programmnotation, der Semantik vonSprachen und der einfachstmöglichen Syntax von Sprachen auf.

Aus diesen hochintelligenten mathematischen Syntaxen entwickelte sich eine höchstbemerkenswerte Kreatur: die ursprüngliche Lisp-Programmiersprache. Im Gegensatz zuden meisten anderen Programmiersprachen entwickelte sie sich nicht aus FORTRAN oderanderen Sprachen, die von praktischen Erwägungen oder leichter Anwendbarkeit angetrie-ben waren. Sie hatte einen vollkommen eigenständigen Stammbaum, der direkt in derMathematik wurzelte. Doch woher kam Lisp?

Einige Menschen behaupten, die Geschichte über die Ursprünge von Lisp wäre für immerim Nebel der Zeit verloren gegangen. Andere (die wahrscheinlich eher recht haben) sagen,Lisp sei 1959 von John McCarthy entwickelt worden. Eines Tages, so erzählt man, versam-melte er seinen Stamm am MIT und präsentierte ihm eine geniale Idee. McCarthys Visionwar eine vollkommen theoretische Programmiersprache, die nur über eine minimale Syn-tax und Semantik verfügte, aber gleichzeitig die Erstellung unglaublich eleganter Pro-gramme ermöglichte. Diese Programme waren so elegant, dass sogar das Schreiben einesInterpreters für Lisp in Lisp selbst nur etwa 50 Zeilen Computercode erfordern würde!

Einführung

26

Als McCarthy sein Konzept zum ersten Mal veröffentlichte, sollte es lediglich der intellektu-ellen Erforschung einer mathematischen Syntax dienen. Aber schon bald darauf entwi-ckelte sich die Lisp-Sprache und konnte mit Compilern und Interpretern arbeiten. Genauwie FORTRAN und die anderen Programmiersprachen lief sie jetzt auf echten Computern!Doch im Gegensatz zu diesen anderen Sprachen bewahrte sich Lisp eine Schönheit, diesich von seiner mathematischen Herkunft ableitete.

Bald nachdem die ersten Lisps veröffentlicht worden waren, traten auch schon die erstenLisp-Programmierer auf den Plan, fingen diese gefügigen Kreaturen ein und verwandeltensie in immer raffiniertere Programmiersprachen. Im Laufe der Zeit formten diese Pro-grammierer aus den urtümlichen Lisps Dialekte wie MACLISP oder Interlisp.

Obwohl die Jagd auf frühe Lisps eine erfolgreiche Nebenbeschäftigung für frühe Lisp-Programmierer war, zeigte sich bald, dass diese Jäger Konkurrenz bekommen hatten: den Cro-Magnon-Menschen. Die Cro-Magnons waren aggressiver als die friedfertigen Lisp-Programmierer und nahmen mit furchterregenden Sprachen wie etwa COBOL immer grö-ßere Softwareentwicklungsprojekte in Angriff. COBOL war ein hässliches und abscheulichesUngetüm, das für Unternehmensanwendungen entwickelt worden war, aber dennoch für dieCro-Magnons eine attraktive Beute darstellte. Dagegen sinnierten Lisp-Programmierer eherüber elegantes Programmieren und beschieden sich damit, gelegentlich ein Lisp zu jagen.

Doch auch wenn Lisp auf einem unglaublich leistungsstarken Konzept basierte, hattenandere Programmiersprachen bereits einen Vorsprung hinsichtlich der öffentlichen An-erkennung errungen und verfügten zudem über ausgereiftere Entwicklungswerkzeuge. Diesstellte die Lisps und die von ihnen abhängigen Lisp-Programmierer vor das Problem, die fürden Erfolg im Mainstream erforderliche Attraktivität erlangen zu müssen. Die sanften Lispergaben sich mit solchen belanglosen Dingen jedoch nicht ab. Und so lebten die Lisper und dieCro-Magnons trotz ihrer unterschiedlichen Neigungen relativ harmonisch Seite an Seite.

Anmerkung

John McCarthy veröffentlichte seinen Aufsatz »Recursive Functions of Symbolic Expres-sions and Their Computation by Machine, Part I« in den »Communications of the ACM«,(April 1960): 184-195. Sie können ihn unter http://www-formal.stanford.edu/jmc/recursive.pdf nachlesen.

Wenn Lisp so großartig ist, warum verwenden es nicht mehr Menschen?

27

Auf ihre Art gediehen die Lisper. Damals profitierten sie stark von höchst akademischen For-schungsgebieten wie etwa der automatischen Bilderkennung, der computerisierten Daten-klassifikation und anderen Problemen, die allgemein der sogenannten künstlichen Intelligenz(KI; englisch: Artificial Intelligence, AI) zugerechnet werden. Die ausgesprochen mathemati-sche Natur dieser Probleme legte nahe, sie mit Lisp-ähnlichen Ansätzen zu lösen – und Lisp-Programmierer bauten zu diesem Zweck neue Lisp-Dialekte in immer fortgeschrittenereComputersysteme ein. Viele betrachten dies heute als das Goldene Zeitalter von Lisp.

Leider drehte sich der Wind und blies den armen Lispern nach dieser kurzen goldenenPeriode unerwartet entgegen. Mitte der 1980er Jahre veränderte ein plötzliches Kippen derErdachse das Klima und verursachte einen Mangel an den Nahrungsressourcen, die dieLisp-Sprachen zum Überleben brauchten. Enttäuschung über die Fortschritte der KI-For-schung führte dazu, dass die Gelder für akademische Forschung zusammengestrichenwurden und ein großer Teil der Hardware, die von den Lisps bevorzugt wurde (etwa dieLisp-Maschinen von Symbolics, Lisp-Maschine, Inc. und Texas Instruments), fiel hinter dieFähigkeiten der traditionelleren CISC- und RISC-Computer zurück (CISC = ComplexInstruction Set Computer, Computer mit komplexem Befehlssatz; RISC = Reduced Instruc-tion Set Computer, Computer mit reduziertem Befehlssatz). Die Welt hatte sich zu einemunwirtlichen Ort für Lisps und die Lisp-Programmierer entwickelt, deren Überleben vonihnen abhing. Der »KI-Winter« war eingetreten und Lisp war dem Untergang geweiht.

Einführung

28

Dadurch erlangten die Cro-Magnons schließlich den entscheidenden Vorteil im Wettlaufder Sprachen. Die neue Welle megalithischer, von FORTRAN abgeleiteter, objektorientier-ter Sprachen wie etwa C++ (1983) hatte langsam die kommerzielle Softwareentwicklungerobert. Dadurch waren die Cro-Magnons gegen den KI-Winter vollkommen immun, unterdem die Lisper dagegen arg litten. Außerdem »borgten« die verschlagenen Cro-Magnonseinige Konzepte aus, die von den Lispern entwickelt worden waren, um Probleme mit denMainstream-Sprachen zu verringern. So hielten etwa Garbage Collection und parametri-scher Polymorphismus, die ursprünglich in Lisp entwickelt wurden, Einzug in die Spra-chen der Mainstream-Programmierer.

Schließlich gelang es den Cro-Magnons, die Sprachungetüme der alten Zeit mit immen-sem Aufwand zu zähmen. Java, C# und ähnliche Sprachen waren angesagt. Es verbreitetesich der Glaube, diese Sprachen ließen sich als Werkzeuge erheblich angenehmer anwen-den als alles in der Vergangenheit jemals Dagewesene – denn das Goldene Zeitalter vonLisp war längst vergessen. In jüngerer Zeit wurden die Cro-Magnon-Sprachen etwa mitPython oder Ruby in modernere Richtungen verfeinert.

Wenn Lisp so großartig ist, warum verwenden es nicht mehr Menschen?

29

Doch was ist während dieser ganzen Zeit mit den Lisp-Programmierern passiert? Musstensie sich dem KI-Winter vollkommen ergeben? Lauern sie wieder einmal in den Schattenund warten auf einen neuen Tag in der Sonne? Das weiß niemand so ganz genau. Aberwenn Sie lange genug suchen, vielleicht auf den höchsten Bergen, in den dichtestenDschungeln oder in den tiefsten Kellern des MIT, können Sie einen Blick auf eine seltsameKreatur erhaschen. Einige kennen sie als Windigo, andere als Yeti, Sasquatch oder rms. Aberdie wirklich Wissenenden glauben, dass es ein Lisp-Programmierer sein könnte – nein,definitiv sein muss.

Worauf basiert die Leistungsstärke von Lisp?

Ich habe gesagt, Lisp wäre eine besonders leistungsstarke Sprache. Was also waren dieSchlüsselerkenntnisse von John McCarthy (und anderen, späteren Innovatoren von Lisp),die diese Leistungsstärke ermöglichten?

Wollen Sie eine Programmiersprache leistungsstark machen, müssen Sie sie ausdrucks-stark machen. In einer ausdrucksstarken Sprache können Sie viele Sachen mit sehr wenigCode programmieren. Aber welche Eigenschaften braucht eine Sprache, um dies zu ermög-lichen? Meiner Meinung nach sind zwei am wichtigsten.

Erstens sollte die Sprache über viele eingebaute Funktionen verfügen. Denn dann ist beiden meisten Aufgaben ein Teil der Arbeit bereits von jemand anderem geleistet worden. Siekönnen auf diese Arbeit zurückgreifen und müssen viel weniger eigenen Code schreiben.Viele moderne Sprachen verfügen über diese Eigenschaft. So ist etwa die Java-Sprache fürleistungsstarke Bibliotheken bekannt, mit denen Sie beispielsweise problemlos Daten voneinem anderen PC über ein Socket abrufen können.

Zweitens sollte es Ihnen die Sprache ermöglichen, so tief wie möglich in ihre Arbeitsweiseeinzugreifen, damit Sie Ihre Aufgaben bewältigen können. So können Sie auch dann, wenndie Designer der Sprache Ihre Absichten nicht voraussehen konnten, die Sprache selbständern, bis sie genau das tut, was Sie für eine elegante Lösung Ihrer Probleme benötigen.Diese Eigenschaft in einer Sprache zu realisieren, ist sehr viel schwieriger. Angenommen,Sie wollten Java um die Unterstützung verschachtelter Funktionsdefinitionen erweitern.Selbst wenn Sie Java gut kennen, verursacht allein das Nachdenken über die Möglichkeit,eine solche Unterstützung zu ergänzen, Kopfschmerzen.

Die meisten Sprachen unterstützen nicht beide Eigenschaften gleich gut, weil zwischenihnen ein Zielkonflikt besteht. Je reichhaltiger eine Sprache von Haus aus ist, desto kompli-zierter ist sie. Und je komplizierter sie ist, desto schwieriger ist es, diese Sprache zuändern. Deswegen sind eigene Änderungen an den meisten ausgereiften Programmier-sprachen fast unmöglich.

Natürlich können Sie bei entsprechendem Aufwand jede Sprache grundlegend ändern. Sowar etwa C++ bei seiner Entwicklung ursprünglich ein C-Präprozessor. Ein besonderesC-Programm konnte Code in dem neuen C++-Dialekt in bewährten alten C-Code konvertie-ren, der dann mit einem Standard-C-Compiler kompiliert werden konnte. So konnte BjarneStroustrup, der Erfinder von C++, die C-Sprache anpassen und Funktionen hinzufügen, umseine eigene, neue Sprache zu schaffen. Doch die Entwicklung eines solchen Übersetzers istextrem schwierig und aufwendig und kann nur als letzter Ausweg betrachtet werden.

Im Gegensatz dazu ist es für erfahrene Lisper in Lisp-Sprachen extrem einfach, den Com-piler/Interpreter zu ändern, der ein Programm ausführt, und zugleich mit umfangreichen

Einführung

30

Bibliotheken vielfältige Funktionen zu unterstützen. Tatsächlich ist in Lisp die Verände-rung der Sprache selbst leichter als in jeder anderen jemals entwickelten Sprache!

Beispielsweise ist es in Lisp wie in den meisten anderen Sprachen einfach, eine Funktionzu schreiben, um den Abstand zwischen zwei Punkten zu berechnen. Aber für einen erfah-renen Lisper wäre es genauso leicht, eine neue Methode für die Verschachtelung von Funk-tionsdefinitionen zu erfinden oder eine peppige if-then-Anweisung zu konzipieren.Selbst eine eigene Unterstützung der objektorientierten Programmierung in Lisp einzufü-gen, ist nicht kompliziert (und die meisten Lisper haben dies irgendwann einmal getan). InLisp wird jeder zu einem Mini-Stroustrup!

Wie stellt Lisp diese hübsche Möglichkeit zur Verfügung? Lisp verfügt über eine grundle-gende Eigenschaft: Es ist unglaublich einfach, ein Lisp direkt in Lisp selbst zu schreiben. Eszeigt sich, dass dies die Schlüsseleigenschaft ist, mit der Lisp das Paradoxon der beiden kon-kurrierenden Eigenschaften aufhebt. Was als Sprache begann, die den coolen mathemati-schen Trick ausführen konnte, elegant sich selbst zu schreiben, besaß letztlich auch genaudie Eigenschaft, die benötigt wurde, um eine reichhaltige Funktionalität und Anpassbarkeitzu vereinen. Dies wiederum macht Lisp zu dem perfekten Werkzeug, um Programme jederArt zu schreiben!

Betrachten Sie es so: Geben Sie einem Programmierer in seiner Programmierspracheeinen fish-Befehl und er wird einmal beim Chinesen essen gehen können. Geben Sieeinem Programmierer eine Programmiersprache, in der er seinen eigenen fish-Befehlschreiben kann und er wird sein Leben lang beim Chinesen essen gehen können (falls ervorher nicht an Vitaminmangel oder womöglich an Herzrhythmusstörungen stirbt).

So, jetzt verstehen Sie, warum Lisp eine sehr coole und sehr ungewöhnliche Programmier-sprache ist. Verglichen mit den meisten Programmiersprachen blickt es auf eine lange undatypische Geschichte zurück. Die meisten Sprachen haben einen technischen Hinter-grund, während Lisp eher mathematisch orientiert ist. Es hat jedem viel zu bieten, derbereit ist, ein wenig Zeit aufzubringen, um etwas Neues zu lernen.