Land of Lisp - mitp- · PDF fileConrad Barski Außerdem bei mitp: Sie lernen: • die...
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