Land of Lisp - mitp- · PDF fileConrad Barski Außerdem bei mitp: Sie lernen: • die...

19
Conrad Barski Lisp-Programmierung einfach lernen und originelle Spiele entwickeln

Transcript of Land of Lisp - mitp- · PDF fileConrad Barski Außerdem bei mitp: Sie lernen: • die...

  • Conrad Barski

    Auerdem 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-Fhig-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 mchtigsten 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 Leistungsstrke der funktionalen Programmierung endlich allen leicht zugnglich.

    Mit seinen brillant schrgen Comics und seinen berirdischen Spielprogrammen fhrt Sie der langjhrige 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 hherer Ordnung und Domain-spezifische Sprachen. Action-geladene Comics gewhren Ihren glhenden Neuronen zwischendurch erholsame Auszeiten!

    Auf Ihrem Weg zum Lisp-Kenner programmieren und spielen Sie verschiedene Computerspiele: Wizards Adventure, ein von Whiskyschwaden durchnebeltes Text-Adventure, Grand Theft Wumpus, die gewaltttigste Hunt-the-Wumpus-Version, die die Welt je gesehen hat, und Dice of Doom, ein Strategiespiel gegen eine kaum zu schlagende Knstliche Intelligenz.

    Dieses Buch zeigt, dass Lisp Ihnen Einsichten in die Computerprogrammierung vermittelt, die so tiefgreifend sind, dass jeder ernsthafte Program-mierer Erfahrungen mit dieser ungewhnlichen Sprache sammeln sollte. Wenn Sie Lisp erst ein-mal verstanden haben, werden Sie fr 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 Hnden.

    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

  • Stichwortverzeichnis

    Symbole#' (Symbol) 91#\newline 105#\space 105' (Einfaches Anfhrungszeichen) 54(#) Hashmark 169() (Leere Liste) 57, 66\ 52\ Backslash 52` (Backquote) 88~ (Tilde) 238~% (Kontrollsequenz) 243~& (Kontrollsequenz) 243~< (Kontrollsequenz) 245~> (Kontrollsequenz) 245~{ (Kontrollsequenz) 247~} (Kontrollsequenz) 247~a (Kontrollsequenz) 248

    Numerisch1- (Befehl) 451+ (Befehl) 45

    AAbgekrzte boolesche Auswertung 75ab-get-ratings-max (Funktion) 407ab-get-ratings-min (Funktion) 408Accessoren 182add (Funktion) 187add-cops (Funktion) 158addiere (Funktion) 352, 389add-new-dice (Funktion) 327, 437add-passing-move (Funktion) 323, 396add-plants (Funktion) 220add-widget (Funktion) 308Adventure-Spiel 85AI 27Akkumulator 344Alisten 86, 127, 143, 157

    Key-Value Pairs 127Schlsselwertpaare 127

    Allegro Common Lisp 36AllegroGraph 23Alleinstellungsmerkmal

    von Lisp 50Alpha Beta Pruning 404, 406, 412, 435Alpha-Beta-Suche 404alphanumericp-Funktion 132Alphanumerische Zeichen 132Anaphorische Makros 358, 365and (Befehl) 73Anforderung 271Anforderungskopf 271Anforderungsparameter 272

    dekodieren 274fr GET-Anforderungen 273

    Anforderungsrumpf 271Anfhrungszeichen

    Eingabe und Ausgabe 103in Strings 114

    Angriff der Roboter-Spiel 250announce-winner (Funktion) 332Anonyme Funktion 119ANSI Common Lisp 33Antwortkopf 272Antwortrumpf 271append (Funktion) 91apply (Funktion) 92Arc 34, 472Arc Assembly 24Arc Lisp 472

    Schwchen 473aref (Funktion) 169, 171

    Werte setzen 170arrayp (Typ-Prdikat) 186Arrays 206

    Common Lisp 169heterogene 189Performance 171vs. Listen 171

    Artificial Intelligence 27ASCII-Zeichensatz 274ash (Befehl) 43

    479

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    480

    Assembler 24Assembler-Sprachen 24assoc (Befehl) 99assoc (Funktion) 86, 142Assoziationslisten 86, 127, 143attacking-moves (Funktion) 323, 325, 430Ausgabe 103

    Leerzeilen vermeiden 243Ausnahmebehandlung 268, 455Ausnahmesituationen 267Ausnahmezustand

    signalisieren 267Auenwelt

    Interaktion 101

    BBackquote (`) 88Backslash (\) 52BASIC 25Baumstrukturen 128Bedingungen

    Tricks 73Bedingungsausdruck

    and (Befehl) 73case (Befehl) 73cond (Befehl) 71if (Befehl) 68or (Befehl) 74unless (Befehl) 71when (Befehl) 71

    Bedrohte Felder 402Befehlszeilenschnittstelle 101Before-Methoden 463below (Token) 212Benutzerschnittstelle 101, 267

    fr Evolutionsspiel 229Bidirektionaler Stream 262BigTable 176Bimodale Verteilung 235Binrsuche 40board-array (Funktion) 319board-attack (Funktion) 326board-attack-fail (Funktion) 431body (Makro) 372Boolesche Werte 65Boolescher Ausdruck 75brightness (Funktion) 373Bugs

    mit CLOS bekmpfen 462mit Continuations bekmpfen 466

    mit funktionaler Programmierung be-kmpfen 452

    mit generischen Settern bekmpfen 458mit kompaktem Code bekmpfen 472mit Lazy Programming bekmpfen 475mit Makros bekmpfen 454mit Restarts bekmpfen 455mit Software Transactional Memory be-

    kmpfen 474

    CC 25C# 28C++ 28, 49Cache Missings 176cadadr (Funktion) 58cadr (Funktion) 58cap (Parameter) 114car (Funktion) 58, 90, 125

    verketten 58car (Symbol) 91case (Befehl) 73cdar (Funktion) 58cdr (Funktion) 58, 125

    verketten 58characterp (Typ-Prdikat) 186char-downcase (Funktion) 115char-equal (Funktion) 82char-upcase (Funktion) 115check- neighbors (Funktion) 436check-pos (Funktion) 436Church, Alonzo 304circle (Funktion) 373CISC (Complex Instruction Set Computer)

    27CL 33CLISP 33

    ausfhren 37Einstieg 36installieren 37

    Clojure 34Clojure Lisp 389Closures 338, 349Clozure CL 36CMUCL 36COBOL 26Code

    entkoppeln 321formatieren 47generieren 352

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    imperativer 306in Lisp 53kompakter 472Listen 50Modi 53strukturieren 50

    code-char (Funktion) 319Codekomposition 309Codemodus 53, 88

    einschalten 88collect (Befehl) 236collect (Klausel) 214Common Lisp 35

    Arrays 169Fehlerbehandlung 267Strukturen 179

    Common Lisp Object System 462Compiler 24Complex Instruction Set Computer (CISC)

    27Computer

    und Text 83concatenate (Funktion) 110cond (Befehl) 71Congestion City 147

    Graph erstellen 150Knoten erzeugen 158

    connected (Funktion) 155connect-with-bridges (Funktion) 155cons (Befehl) 57cons (Funktion) 56Consen 57Conses

    vergleichen 79Consing 57consp (Typ-Prdikat) 186Cons-Zelle

    cons-Funktion 56Listen 55

    cons-Zellen 124Datenstrukturen 128

    Continuations 466Schwchen 467

    copy-structure (Funktion) 226count (Funktion) 183

    DDateien

    mit Streams arbeiten 257schreiben 136

    Datengenerisch handhaben 182in Dateien schreiben 136in Lisp 53ber die Konsole einlesen 134

    Datenmodus 53, 54, 88einschalten 88

    DatenstrukturenBaumstrukturen 128cons-Zellen 128

    Debugging 140decf (Funktion) 196decode-param (Funktion) 273defclass (Befehl) 462define-condition (Funktion) 268defmacro (Befehl) 352, 354defmethod (Befehl) 187defmethod (Funktion) 188defparameter (Befehl) 40defstruct (Befehl) 179, 206defstruct (Funktion) 181, 195defun (Befehl) 43defvar (Befehl) 41delayed computation 140Depth-First-Suche 406Dice of Doom 315

    3x3-Spielfeld 346Anfangsregeln 315Angriffsfunktion 326Angriffszge berechnen 324gegen KI-Spieler spielen 335gegen Menschen spielen 329Gewinner ermitteln 331grafische Version 427Hauptschleife 329Input verarbeiten 330KI-Gegner 333Mensch-gegen-Computer 336Mensch-gegen-Mensch 332Nachbarn ermitteln 325Regeln entkoppeln 320Spielfeld 318SVG-Format 413Tail-Call-Optimierung 345Version 1 317Version 2 395Version 3 420Version 3 spielen 425Version 4 429Verstrkungen berechnen 327Webversion 413

    481

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    482

    Dice Wars 315direct-edges (Funktion) 154Division

    von Ganzzahlen 52Divisionssymbol 52do (Token) 212dod-request-handler (Funktion) 420Domain 367domain 304Domain-spezifische Sprachen 35, 367, 461Doppeltes Anfhrungszeichen (") 52Dot 56dot->png (Funktion) 135DOT-Datei 130

    in Grafik umwandeln 135DOT-Daten generieren 131DOT-Format

    Kanten 134Knoten 132

    DOT-Format konvertieren 131dotimes (Befehl) 190dotimes (Funktion) 177dot-label (Funktion) 132DOT-Listen 124dot-name (Funktion) 131draw-board (Funktion) 320draw-board-svg-Funktion 419draw-city (Funktion) 161draw-die-svg (Funktion) 414draw-dod-page (Funktion) 424draw-known-city (Funktion) 164draw-tile-svg (Funktion) 417draw-tile-svg-Funktion 417draw-world (Funktion) 228DSL 367, 385

    fr SVG 372fr Wizard's Adventure 376

    DSLs 461Schwchen 461

    Dynamische Variable 42

    EEarmuffs 41eat (Funktion) 225edge-pair (Funktion) 152edges 88edges->dot (Funktion) 134edges-to-alist (Funktion) 157EDSAC Initial Orders 24

    Einfaches Anfhrungszeichen (') 54Eingabe 103Einrckung 47Emacs 36Emacs Lisp 35Ende einer Liste 57ENIAC 24Entkopplung

    funktionale Programmierung 321von Code 321

    eq (Funktion) 79eql (Funktion) 81equal (Funktion) 79equalp (Funktion) 81Errate meine Zahl 39error (Befehl) 267error (Funktion) 281erstelle-person (Funktion) 180Erster Slot

    einer Zelle abrufen 58eval (Funktion) 107

    Sicherheit 117Sicherheitsrisiko 108Wann verwenden? 108

    every (Befehl) 194every (Funktion) 183evolution (Funktion) 229, 230Evolutionsspiel 218

    Ablauf 235Benutzerschnittstelle 229Si