Land of Lisp · 2011. 12. 24. · Diese dunklen Zeiten sind nun vorbei – Land of Lisp macht die...

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

Transcript of Land of Lisp · 2011. 12. 24. · Diese dunklen Zeiten sind nun vorbei – Land of Lisp macht die...

  • 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

  • Stichwortverzeichnis

    Symbole#' (Symbol) 91#\newline 105#\space 105' (Einfaches Anführungszeichen) 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

    AAbgekürzte 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 127Schlüsselwertpaare 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 274für GET-Anforderungen 273

    Anforderungsrumpf 271Anführungszeichen

    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

    Schwächen 473aref (Funktion) 169, 171

    Werte setzen 170arrayp (Typ-Prädikat) 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 267Außenwelt

    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

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

    mit CLOS bekämpfen 462mit Continuations bekämpfen 466

    mit funktionaler Programmierung be-kämpfen 452

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

    kämpfen 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-Prädikat) 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

    ausführen 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-Prädikat) 186Cons-Zelle

    cons-Funktion 56Listen 55

    cons-Zellen 124Datenstrukturen 128

    Continuations 466Schwächen 467

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

    DDateien

    mit Streams arbeiten 257schreiben 136

    Datengenerisch handhaben 182in Dateien schreiben 136in Lisp 53über 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 326Angriffszüge 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 429Verstärkungen 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 Anführungszeichen (") 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

    für SVG 372für Wizard's Adventure 376

    DSLs 461Schwächen 461

    Dynamische Variable 42

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

    Einfaches Anführungszeichen (') 54Eingabe 103Einrückung 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 229Simulation 227

    expt (Funktion) 54

    FF (Wahrheitswert) 66Farben

    SVG 372Fehlerbehandlung

    in Common Lisp 267in Lisp 267

    Felderbedrohte 402

    Filestreams 254, 257find-empty-node (Funktion) 161find-if (Funktion) 183find-islands (Funktion) 155Firefox 271Firewall 117first-class values 120

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    flet (Befehl) 47Fließkommazahlen 51

    formatieren 241flip-flop 88Fluchtzeichen

    in Strings 52for (Befehl) 236for (Token) 212for in (Befehl) 236Form

    Definition 53format (Befehl) 211, 250format (Funktion) 237

    Kontrollstring 238Wertparameter 238

    Formatierungvon Fließkommazahlen 241von Tabellen 248von Text 237von Zahlen 240

    FORTRAN 24Franz, Inc. 36fresh-line (Befehl) 243fresh-line (Funktion) 115funcall (Funktion) 194function (Operator) 90functionp (Typ-Prädikat) 186Funktion

    anonyme 119auswerten 304Begriff 303definieren 42, 47Gegenstandsbereich 304globale 42lokale 47Parameter 43rekursiv aufrufen 66Rückgabewert 43unbenannte 119Wertebereich 304

    Funktion höherer Ordnung 90Funktionale Programmierung 35, 70, 87, 303,

    452Entkopplung 321Grundsatz 306Nachteile 311Schwächen 453Vorteile 312

    Funktionale Programmierung höherer Ord-nung 121

    Funktionaler Stil 305Funktionen

    generische 132nullarische 136

    Funktions-Pipeline 320

    GGame Engine

    eigene Schnittstelle 108Game Tree

    beschneiden 398generieren 322memoisieren 341

    game-action (Makro) 381game-eval (Funktion) 111game-loop (Funktion) 190game-print (Funktion) 112game-read (Funktion) 109game-repl (Funktion) 108game-tree (Funktion) 322Ganzzahlen 51

    Division 52Garbage Collection 28, 339Garret, Ron 271Gegenstandsbereich 304gehe (Funktion) 165gen-board (Funktion) 319Generalisierte Referenz 170Generische Funktionen 132, 206Generische Programmierung 35Generische Setter 170, 458

    Schwächen 458gensym (Funktion) 360Gerichtete Graphen 140get-connected (Funktion) 154, 177, 436get-connected-hash (Funktion) 178get-content-params (Funktion) 277gethash- (Funktion) 173get-header (Funktion) 277get-ratings (Funktion) 335, 402, 434GIMP 35Globale Funktion 42Globale Variable 40Goldenes Zeitalter von Lisp 27Graham, Paul 34, 370, 472Grand Theft Wumpus 146

    initialisieren 161mit Hashtabellen 177spielen 166

    graph->dot (Funktion) 135

    483

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    484

    Graph-Drawing-Bibliothek 131, 143Graphen 143

    erstellen 130gerichtete 140Grafik erstellen 139Inseln 153mathematische 129ungerichtete 140visualisieren 129

    Graphviz 130Graphviz-DOT-Datei 131Graphviz-Layouts 130Groß-/Kleinschreibung 51Guile Scheme 35

    Hhandle-computer (Funktion) 335, 409, 433handle-direction (Funktion) 165handle-human (Funktion) 330, 397, 433handle-new-place (Funktion) 165handler-case (Befehl) 268hash-edges (Funktion) 178Hashfunktion 176Hashkollisionen 176Hashmark (#) 169Hashtabelle

    Schlüssel 173Werte abrufen 173Werte setzen 174

    Hashtabellen 172, 206Performance 175, 176

    hash-table-p (Typ-Prädikat) 186Haskell 34, 307, 389hello-request-handler (Funktion) 279Heterogene Arrays 189Heuristiken 400, 412Hickey, Rich 34hidden state 310Higher-order Functional Programming 121higher-order programming 309High-order function 90Homoikonische Programmiersprache 107,

    118Homoikonizität 107, 108HTML 369html (Makro) 372HTML-Standard 271html-Tags 271HTTP 270HTTP-Fluchtzeichen 273

    Hughes, John 321Hunt the Wumpus 145Hydra 199Hypertext Transfer Protocol 270

    Iif (Befehl) 68

    Sonderform 69if (Form) 65Imperative Programmierung

    Nachteile 310Vorteil 310

    Imperativer Code 306in (Token) 212incf (Funktion) 195ingredients (Funktion) 164init-monsters (Funktion) 194init-player (Funktion) 191Input 103input-stream-p (Funktion) 255Inputstreams 255, 266Inseln

    in Graphen 153Interaktion

    mit der Außenwelt 101Interlisp 26intern (Befehl) 276Interpreter 24intersection (Funktion) 158, 168IP-Adresse 260Isomorphie 79

    JJava 28Jones, Simon Peyton 311

    KKanten 88, 129

    DOT-Format 134Kartesisches Produkt 215KDice 315Key-Value Pairs 127Keyword Parameter 133KI 27

    für größere Spielfelder 398Heuristiken 400

    KI-Winter 27Klammern

    in Lisp 42leere 43

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    Kleiner-als (Funktion) 186Knoten 85, 129

    DOT-Format 132known-city-edges (Funktion) 163known-city-nodes (Funktion) 162Kommunikation

    mit anderen Computern 259über ein Netzwerk 267

    Kompakter Code 472Komplement 132Konsole

    Daten einlesen 134Konsolen-Output

    abfangen 138Konsolenstreams 254Kontrollsequenzen 239Künstliche Intelligenz 27

    Llabels (Befehl) 48lambda (Funktion) 119

    als Sonderform 121Bedeutung 121Makros 120

    Lambda-Kalkül 25, 121, 304largest-cluster-size (Funktion) 436Laufzeit 354lazy (Befehl) 389lazy (Makro) 390Lazy Evaluation 387Lazy Game Tree 321Lazy Lists 391

    in Listen konvertieren 393Mapping 393suchen 393

    Lazy Programming 387, 412, 475Schwächen 476

    Lazy Sequences 391Lazy-Lists-Bibliothek 391lazy-mapcan (Funktion) 396lazy-nil (Funktion) 392, 394, 396, 399lazy-null (Funktion) 392Leere Liste 65

    Wahrheitswert 66Leere Liste () 57Leerzeilen

    vermeiden 243Leistungsstärke

    von Lisp 29length (Funktion) 182

    let (Befehl) 46, 139Lexikalische Variable 338limit-tree-depth (Funktion) 399, 435Lisp

    Alleinstellungsmerkmal 50als Mehrparadigmen-Sprache 35Anpassbarkeit 29Anwender 22Code und Daten 53Eigenschaften 21Entwicklung 25erweitern 454Etikette 42Fehlerbehandlung 267Funktion aufrufen 39Funktionsvielfalt 29Geschichte 23Goldenes Zeitalter von Lisp 27Groß-/Kleinschreibung 51Klammern 42lambda (Funktion) 119Leistungsstärke 29Listen 50, 54Literale 104Makros 352, 454Read-Eval-Print Loop (REPL) 38Strings 52Symbole 51Symmetrie 65Text 52Text manipulieren 83Vergleiche 78Webserver schreiben 270Zahlen 51

    Lisp-1 91Lisp-2 91Lisp-Befehl

    Klammern 49Semantik 49Syntax 49

    Lisp-Dialekt 26, 33Lisp-Maschine, Inc. 27Lisp-Syntax 50

    Punktnotation 124LispWorks 36list (Funktion) 59List Eater 66Liste

    als Strukturelement 50in Aliste konvertieren 157

    485

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    486

    in String umwandeln 115Terminator 57verschachtelte Listen 59

    List-Eater-Funktionen 357Listen

    Alisten 127, 143Assoziationslisten 127, 143Cons-Zellen 55DOT-Listen 124Enthaltensein prüfen 76in Lazy Lists konvertieren 391, 392, 393,

    395, 396in Lisp 54manipulieren 56Mappings 127Paare von Elementen 125Punktlisten 124, 143rekursiv verarbeiten 66Steuersequenzen 247verarbeiten 123verkettete 56vs. Arrays 171Zirkuläre Listen 125zirkuläre Listen 143

    Listenfresser 66Listenfunktionen 56Listensyntax 124listp (Typ-Prädikat) 186Literale

    Lisp 104Lokale Funktion 47Lokale Variable 46lookup key 86loop (Befehl) 152, 211, 236loop (Funktion) 168loop (Makro) 211

    Tokens 212loop-Makro

    Periodensystem 218

    MMACLISP 26Macro Expansion Time 354macroexpand (Befehl) 356Mainstream-Sprachen 28make-array (Befehl) 169make-city-edges (Funktion) 155, 156make-city-nodes (Funktion) 159make-edge-list (Funktion) 151make-hash-table (Befehl) 173make-lazy (Funktion) 392

    make-ork (Funktion) 197make-string-input-stream (Funktion) 277Makro

    Bedingungsausdrücke 69Makroerweiterung 353, 354Makroerweiterungszeit 354Makroexpansion 354Makro-Hilfsfunktion 369Makroprogrammierung 351Makroprozessor 354Makros 108, 365, 454

    anaphorische 358DSLs 367Gefahren 363in Lisp 352lambda (Funktion) 120Nachteile 364Periodensystem des loop-Makros 218Reader-Makros 117Rekursionsmakro 361Schwächen 454

    Makroumwandlung 354map (Funktion) 185mapcan (Funktion) 163mapcar (Funktion) 90Mappings 127Maschinensprache 24Maschinenunabhängige Programmierspra-

    chen 24Mathematische Funktion

    Eigenschaften 304McCarthy, John 26Mehrparadigmen-Sprache 35member (Befehl) 76member (Funktion) 98, 111Memoisierung 340, 349Metaobject Protocol 462Methode 188, 463Minimax-Algorithmus 334, 349, 406MIT 25monster (Struktur) 195monster-attack (Funktion) 197, 198, 201monster-dead (Funktion) 194monster-hit (Funktion) 196, 200monster-show (Funktion) 197, 198MOP 462move (Funktion) 223Multicore-Code 474Multiples Dispatching 463

    Schwächen 464multiple-value-bind (Befehl) 175

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    Mutation 181my-length (Funktion) 343

    NNamensraum 91

    Scheme 91neato 130Nebeneffekte 134, 305, 311, 452neighbors (Funktion) 158, 325neighbors-Funktion

    Memoisierung 340Netzwerk

    Kommunikation 267new-game (Funktion) 161, 164Nichtdeterministische Programmierung 466nil (Symbol) 56nodes->dot (Funktion) 133nth (Funktion) 171null (Funktion) 78Nullarische Funktionen 136numberp (Typ-Prädikat) 186

    OObjektorientierte Programmierung (OOP)

    30, 35, 180, 462oddp (Befehl) 77Optimierung

    Memoisierung 340Tail-Call-Optimierung 342

    or (Befehl) 74Orc Battle 188

    generische Monster 195globale Variablen 189Hauptfunktionen 189Hydra 199Monster 195Monstermanagement 194Ork 197Räuber 202Schleimschimmel 200Spielermanagement 191

    Ork 197Orthogonale Probleme 399Output 103output-stream-p (Funktion) 255Outputstreams 254, 266

    PPaare 143

    von Elementen 125

    pairs (Funktion) 362Parameter

    von Funktionen 43parse-params (Funktion) 275parse-url (Funktion) 275Performance

    bei funktionaler Programmierung 312Periodensystem des loop-Makros 218pick-chance-branch (Funktion) 432pick-monster (Funktion) 193player (Funktion) 325player-attack (Funktion) 191, 193play-vs-computer (Funktion) 335, 400play-vs-human (Funktion) 329, 397polygon (Funktion) 374Polymorphismus 28, 463Port 279Port 8080 279Port-Nummer 260position (Funktion) 183POST-Anforderung 272Prädikat 94, 132prin1 (Funktion) 102princ (Befehl) 52print (Funktion) 101, 102print-info (Funktion) 330print-tag (Funktion) 369progn (Befehl) 70Programmabsturz 269Programmiersprache

    homoikonische 107, 118lernen 21

    ProgrammiersprachenAssembler-Sprachen 24Mainstream-Sprachen 28maschinenunabhängige 24

    Programmierungfunktionale 303, 452Lazy Programming 387nichtdeterministische 466

    Programmierung höherer Ordnung 309, 311Programmmodus 53Properties

    Strukturen 179Punkt 56Punktlisten 124, 143Punktnotation 124push (Befehl) 98

    Hashtabellen 178push-assoc-Idiom 99Python 28

    487

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    488

    QQuasiquoting 88, 108quote (Funktion) 110Quoted-Liste 67Quoting 54, 108

    RRacerPro 23random (Funktion) 193Random Walk 374random-monster (Funktion) 193random-node (Funktion) 151random-plant (Funktion) 220random-walk (Funktion) 375randval (Funktion) 192range 304rate-position (Funktion) 334, 402, 408rate-position-Funktion

    memoisieren 342Rationale Zahl 52Räuber 202RDF (Resource Description Framework) 23read (Funktion) 101, 103

    Sicherheit 117read-char (Befehl) 256Reader-Makros 117Read-Eval-Print Loop (REPL) 38read-line (Funktion) 106recurse (Makro) 362reduce (Funktion) 183, 184, 364Reduced Instruction Set Computer (RISC) 27Reduktionsfunktion 364Referentielle Transparenz 304Referenz

    generalisierte 170Rekursion 48, 66Rekursionsmakro 361remove-duplicates (Funktion) 168REPL (Read-Eval-Print Loop) 38REPL (Read-Evaluate-Print Loop) 39Request 271Request-Body 271, 277Request-Content 277Request-Handler

    testen 280Request-Header 271

    parsen 275Request-Parameter 273Resource Description Framework (RDF) 23Response-Body 271

    Response-Header 272Rest

    einer Zelle abrufen 58restart-case (Befehl) 456Restarts 455

    Schwächen 456RGB Triple 372RISC (Reduced Instruction Set Computer )

    27Risk 315roll-against (Funktion) 432roll-dice (Funktion) 431round (Funktion) 174Ruby 28Rückgabewert 43Runtime 354

    SS3 176SBCL (Steel Bank Common Lisp) 36Scalable Vector Graphics 367Scheme 33, 34

    Namensraum 91schiesse (Funktion) 165Schleimschimmel 200Schlüssel 86Schlüsselwertpaare 127Schlüsselwortparameter 97, 133, 137Schlüsselwortsymbol 138Schnittstelle

    Befehlszeilenschnittstelle 101für die Game Engine 108

    score-board (Funktion) 401, 402Script-Fu Scheme 35Scripting 35Semantic Web 23Semantik 49Sequenzen

    mit Sequenzfunktionen durchlaufen 183Sequenzfunktionen 182, 206

    Daten durchsuchen 183Sequenzen durchlaufen 183

    serve (Funktion) 278set-difference (Funktion) 155, 168setf (Befehl) 45, 99, 170setf (Funktion) 458Setter

    generische 170Short Code 24show-monsters (Funktion) 194

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    Sicherheiteval (Funktion) 117read (Funktion) 117

    Sicherheitsrisikoeval (Funktion) 108

    side effects 134sin (Funktion) 305SLIME 36Slots 179Socket-Adresse 260Sockets 259Socketstream 254, 266, 269Socket-Verbindung 261Software Transactional Memory 474

    Schwächen 475some (Funktion) 183Sonderform 69, 352sort (Funktion) 186Spezielle Variable 42Spielfeld

    von Dice of Doom 318Spiel-Webserver 421split (Makro) 357Steel Bank Common Lisp (SBCL) 36Steele, Guy L. 34Steuersequenzen

    Listen 247Stream 137, 253, 266

    Arten 253bidirektionaler 262erstellen 137

    Streamvariable 137String

    aus Liste erzeugen 115Fluchtzeichen 52in Lisp 52in Liste von Zeichen umwandeln 114mit Anführungszeichen 114

    string-equal (Funktion) 82stringp (Typ-Prädikat) 186Stringstreams 254Strukturen

    Properties 179wann einsetzen? 180

    subseq (Funktion) 186substitute-if (Funktion) 131, 132substitute-if-not (Funktion) 132Suchen

    mit Sequenzfunktionen 183sum (Funktion) 185

    sum (Token) 212Suspension 136Sussman, Gerald Jay 34SVG 367

    Beispiel 374Dice of Doom 413DSL 372Farben 372

    svg (Makro) 372svg-Makro 414svg-style (Funktion) 373Symbol 51Symbolics 27symbolp (Typ-Prädikat) 186Symmetrie 65

    von Code und Daten 107Syntax 49

    Punktnotation 124Syntaxausdrücke 129, 143

    TT (Wahrheitswert) 67Tabellen

    formatieren 248tag (Makro) 370Tags 369Tail Call 344Tail-Call-Optimierung 342, 349

    in Dice of Doom 345take-all (Funktion) 393TCP/IP 260, 270Terminator einer Liste 57terpri (Befehl) 242Texas Instruments 27Text

    drucken und lesen 101formatieren 237in der REPL 52in Lisp 52in Lisp manipulieren 83und Computer 83

    Textverarbeitung 83Thunks 136, 143Tiefensuche 406Tilde (~) 238time (Befehl) 177, 206Top-Level-Definition 40trage (Funktion) 379turn (Funktion) 224Type Dispatching 187

    489

    http://www.mitp.de/9163

  • Stichwortverzeichnis

    490

    type-of (Funktion) 196Typ-Prädikate 186

    Nachteile 187

    UUnbenannte Funktion 119Ungerichteter Graph 140, 150unless (Befehl) 70unwind-protect (Befehl) 269

    Vvalues (Funktion) 175Variable

    definieren 40, 46dynamische 42globale 40lexikalische 338lokale 46spezielle 42

    Variable Shadowing 344Variablennamen

    generieren 360Verborgener Zustand 310Vererbung 197Vergleiche

    in Lisp 78Vergleichsfunktionen 78Verkettete Liste 56Verschachtelte Listen 59Verzögerte Berechnung 140Verzweigungen 71Virtual Memory Paging 176Visualisierung

    von Graphen 129Visuelles Rauschen 352

    WWahrheitswerte 65Webformulare 272web-handle-computer-Funktion 424web-handle-human-Funktion 422, 423web-initialize-Funktion 422Webserver 282

    Arbeitsweise 270mit Lisp erstellen 267

    schreiben 270Spiel-Webserver 421

    Websiteerstellen 279veröffentlichen 281

    Werte erster Klasse 120Wertebereich 304when (Befehl) 70when (Token) 213winners (Funktion) 331within-two (Funktion) 159with-open-file (Befehl) 257, 258with-open-file (Funktion) 136with-output-to-string (Makro) 266Wizard's Adventure

    ausprobieren 383DSL 376

    Würfelerstellen 414

    XXML 129, 369

    ZZahlen

    Fließkommazahlen 51formatieren 240Ganzzahlen 51in Lisp 51rationale Zahl 52runden 241

    Zahlensysteme 240Zeichen

    alphanumerische 132als Literale eingeben 104

    Zeilenumbruch 47, 242Zelle

    ersten Slot abrufen 58Rest abrufen 58

    Zielparameter 238Zirkuläre Listen 125, 143

    drucken 126Zuse Z3 24

    http://www.mitp.de/9163

  • Marius Apetri

    Mathematische Grundlagen und Einführung in die 3D-Grafi k-

    programmierung

    Modellierung dreidimensionaler Umgebungen

    Zahlreiche anschauliche Beispiel- programme und Übungsaufgaben

    Probekapitel und Infos erhalten Sie unter: www.mitp.de/5512

    Der OpenGL-Standard ist eine sprachenunabhängigeProgrammierschnittstelle zur Entwicklung von 2D- und 3D-Computergrafi k und eignet sich zur Dar-stellung komplexer Szenen in Echtzeit. OpenGL ist die Grundlage zur Erstellung zahlreicher Software-projekte wie Computerspiele, Animationen für Film- und Videoprojekte, wissenschaftliche Dar-stellungen oder „virtuelle Realität“.

    Dieses Buch vermittelt die Kenntnisse, die für die Erstellung einfacher bis komplexer OpenGL-Anwendungen benötigt werden. Alle Themen werden anhand anschaulicher Beispiele erläutert. Der OpenGL-Standard wird aus der Perspektive des Entwicklers vorgestellt, der komplexe virtuelle Welten generieren möchte, in denen man sich frei bewegen kann.

    Nach der Vorstellung grundlegender Konzepte von OpenGL wird die Visualisierung von Punkten, Linien,Polygonen und Polyedern erläutert. Daraufhin behandelt der Autor das von OpenGL eingesetzte System zur Verarbeitung von Matrizen einschließ-lich der Vorteile dieses Systems gegenüber der in

    der Mathematik üblichen Reihenfolge der Multipli-kation von Matrizen.

    Weitere Schwerpunkte sind die Geometry Pipeline, Picking, eine ausführliche Einführung in die Pro-grammierung des Vertex- und Fragmentprozessors mit GLSL, die hardwarebeschleunigte Bearbeitung von Bildern, Semitransparenz sowie Texturprojek-tion und -schattierung. Die Darstellung einer virtu-ellen Welt aus der Sicht mehrerer, beliebig positio-nierter und ausgerichteter Kameras wird ebenfalls behandelt.

    Dies ist ein Lehrbuch mit zahlreichen Übungsaufga-ben, das sich besonders gut für das Alleinstudium eignet. Zusammenhänge werden einem breiten Publikum nachvollziehbar erklärt, und es werden lediglich gute Kenntnisse einer leistungsfähigen Programmiersprache sowie das mathematische Grundwissen der gymnasialen Mittelstufe voraus-gesetzt. Dabei richtet sich der Autor an Leser, die weder über OpenGL-Kenntnisse noch über Vor-kenntnisse in der Computergrafik verfügen. Die Beispiele im Buch sind in C++ erstellt.

    ISBN 978-3-8266-5512-8

    3D-Grafi k mit

    OpenGLDas umfassende Praxis-Handbuch

    http://www.mitp.de/5512http://www.mitp.de/9163

  • Robert C. Martin

    Kommentare, Formatierung, Strukturierung

    Fehler-Handling und Unit-Tests

    Zahlreiche Fallstudien, Best Practices, Heuristiken

    und Code Smells

    Probekapitel und Infos erhalten Sie unter: www. .de/5548

    Selbst schlechter Code kann funktionieren. Aber wenn der Code nicht sauber ist, kann er ein Entwicklungsunternehmen in die Knie zwingen. Jedes Jahr gehen unzählige Stunden und beträchtliche Ressourcen verloren, weil Code schlecht geschrieben ist. Aber das muss nicht sein.

    Mit Clean Code präsentiert Ihnen der bekann-te Software-Experte Robert C. Martin ein revolutionäres Paradigma, mit dem er Ihnen aufzeigt, wie Sie guten Code schreiben und schlechten Code überarbeiten. Zusammen mit seinen Kollegen von Object Mentor destilliert er die besten Praktiken der agilen Entwicklung von sauberem Code zu einem einzigartigen Buch. So können Sie sich die Erfahrungswerte der Meister der Software-Entwicklung aneig-nen, die aus Ihnen einen besseren Program-mierer machen werden – anhand konkreter Fallstudien, die im Buch detailliert durchge-arbeitet werden.

    Sie werden in diesem Buch sehr viel Code lesen. Und Sie werden aufgefordert, darüber nachzudenken, was an diesem Code richtig und falsch ist. Noch wichtiger: Sie werden

    herausgefordert, Ihre professionellen Werte und Ihre Einstellung zu Ihrem Beruf zu über-prüfen.

    Clean Code besteht aus drei Teilen: Der erste Teil beschreibt die Prinzipien, Patterns und Techniken, die zum Schreiben von sauberem Code benötigt werden. Der zweite Teil besteht aus mehreren, zunehmend komplexeren Fall-studien. An jeder Fallstudie wird aufgezeigt, wie Code gesäubert wird – wie eine mit Pro-blemen behaftete Code-Basis in eine solide und effi ziente Form umgewandelt wird. Der dritte Teil enthält den Ertrag und den Lohn der praktischen Arbeit: ein umfangreiches Kapi-tel mit Best Practices, Heuristiken und Code Smells, die bei der Erstellung der Fallstudien zusammengetragen wurden. Das Ergebnis ist eine Wissensbasis, die beschreibt, wie wir denken, wenn wir Code schreiben, lesen und säubern.

    Dieses Buch ist ein Muss für alle Entwickler, Software-Ingenieure, Projektmanager, Team-Leiter oder Systemanalytiker, die daran inter-essiert sind, besseren Code zu produzieren.

    ISBN 978-3-8266-5548-7

    Clean CodeRefactoring, Patterns, Testen und Techniken für sauberen Code

    http://www.%ED%AF%80%ED%B1%90%ED%AF%80%ED%B1%8C%ED%AF%80%ED%B1%97%ED%AF%80%ED%B1%93.de/5548http://www.mitp.de/9163

  • Dieses Buch ist ein inspirierender Wegweiser für Programmierer und Softwareentwickler. Chad Fowler zeigt Ihnen, wie Sie sich nachhaltig persön-lich weiterentwickeln können, um Ihre eigene berufl iche Laufbahn erfolgreich zu gestalten und Schritt für Schritt Ihre eigenen Ziele zu verfolgen und zu realisieren.

    Wenn die Softwareentwicklung für Sie eine Leiden-schaft ist, dann werden Sie mit diesem Buch ler-nen, wie es Ihnen gelingt, Ihre Fähigkeiten best-möglich zu entfalten und in Ihrer beruflichen Laufbahn Anerkennung und Erfolg zu erlangen.

    Chad Fowler berichtet aus eigener Erfahrung, wor-auf es im Beruf ankommt, und macht Ihnen deut-lich, dass Sie Ihre berufl iche Entwicklung nicht dem Zufall überlassen, sondern selbst in die Hand neh-men sollten. Dies erfordert Nachdenken, Handeln und die Bereitschaft, einen eingeschlagenen Weg zu ändern.

    Wählen Sie den Markt und die Technologien, mit denen Sie sich beschäftigen, gezielt und bewusst aus. Investieren Sie in Ihre eigenen Fähigkeiten. Lernen Sie, wie Sie Ihre Fähigkeiten wie ein Pro-dukt behandeln und vermarkten müssen, um damit erfolgreich zu sein. Sie werden erfahren, wie Sie Ihre Situation selber positiv beeinfl ussen und ver-bessern können.

    Chad Fowler gibt Ihnen praktische Anleitungen und für jeden umsetzbare Methoden an die Hand und

    erläutert Ihnen die notwendigen Schritte, die für Sie wichtig sind, um die eigenen Wünsche und Fähigkeiten zu erkennen, weiterzuentwickeln und diese auch gut verkaufen zu können.

    Beispielhafte Laufbahnen erfolgreicher Software-entwickler zeigen Ihnen, wie es andere geschafft haben.

    Mit diesem Buch kann jeder seine persönliche Ent-wicklung ganz individuell gestalten. Es wird Ihr Leben, Ihre Einstellungen und Ihre Motivation posi-tiv verändern! Und Sie werden Erfolg damit haben!

    „Das Großartige an diesem Buch ist, dass es zahl-reiche Handlungsanweisungen enthält – Dinge, die ich tun kann. Es macht deutlich, dass die Verant-wortung für meine Situation dort liegt, wo sie hin-gehört – bei mir. Dieses Buch arbeitet heraus, was ich heute tun kann. Und morgen. Und im Rest mei-ner berufl ichen Laufbahn.“

    Kent Beck, Programmierer

    „Knapp sechs Monate, bevor ich dieses Buch las, stand ich kurz davor, meinen Beruf zu wechseln. Mehrere Zufälle brachten mich dazu, nicht nur bei der Softwareentwicklung zu bleiben, sondern aus ihr eine Leidenschaft zu machen, die ich wirklich meistern wollte. Dabei diente mir dieses Buch mit seiner gesunden Prise Inspiration als Wegweiser zu meinen Zielen.“

    Sammy Labri, Chief Spaghetti Coder

    Chad Fowler

    ThePASSIONATE PROGRAMMER

    Probekapitel und Infos erhalten Sie unter:

    Der leidenschaftliche Programmierer

    Wie Programmierer ihre berufl iche Laufbahn erfolgreich gestalten

    http://www.mitp.de/9163

  • Frederick P. Brooks

    Probekapitel und Infos erhalten Sie unter: www.mitp.de/9080

    Gute Designprozesse bilden die Basis aller erfolgreichen Produkte, von der Software-Entwicklung über die Ingenieurswissenschaf-ten bis hin zur Architektur. Aber wie sollten gute Designprozesse ablaufen und was sind die wichtigen Faktoren für effektives und ele-gantes Design?

    Frederick Brooks, Autor des Bestsellers »Vom Mythos des Mann-Monats«, vermittelt in diesem Buch interessante Erkenntnisse für Designer aller Fachbereiche. Er beschreibt die Bedeutung durchdachter Designprozes-se, stellt wiederkehrende Konstanten in allen Design-Disziplinen heraus und macht auf her-ausragende Ansätze und Ideen aufmerksam.

    Ausgehend von Gesprächen mit zahlreichen außergewöhnlichen Designern erfolgreicher Projekte sowie aufbauend auf eigenen Erfah-rungen beobachtet Brooks, dass gewagte und innovative Design-Entscheidungen häufig zu besseren Ergebnissen führen. Er verfolgt die Evolution des Designprozesses, untersucht Teamdesign und zeigt auf, was gute Designer ausmacht.

    Durch stetige Optimierung der Designprozesse lassen sich die Design-Qualität steigern und Kosten senken, denn Großteile des Budgets fließen sonst häufig in unnötige Überarbeitun-gen und Fehlerkorrekturen.

    Seine Ausführungen belegt Brooks mit realen Fallbeispielen aus unterschiedlichen Berei-chen, von der Entwicklung der Software-Architektur des IBM System/360 über das Design von Büchern und Organisationen bis hin zum Bau eines Strandhauses.

    Über den AutorFrederick P. Brooks ist der Träger des A.M. Turing Award der ACM im Jahre 1999 – der Auszeichnung mit dem höchsten Prestige im Computerbereich. Er erhielt diesen Preis insbesondere für seine »bahnbrechenden Beiträge zur Architektur von Computern, Betriebssystemen und auf dem Gebiet des Software Engineerings« – speziell auch für die Entwicklung des IBM System/360. Außerdem ist er Autor des Bestsellers »Vom Mythos des Mann-Monats«.

    ISBN 978-3-8266-9080-8

    Erfolgreiches Design Essays über universelle Designprozesse mit Beispielen aus IT und Software-Entwicklung

    Durchdachte Designprozesse entwickeln

    Anschauliche Fallbeispiele aus unterschiedlichen Fachgebieten

    Für Designer, Software- Architekten, Projektmanager

    und Design-Wissenschaftler

    http://www.mitp.de/9080http://www.mitp.de/9163

  • Peter Seibel

    Probekapitel und Infos erhalten Sie unter: www.mitp.de/9103

    Dieses Buch enthält eine Sammlung aufschluss-reicher Interviews mit 15 verdienten und zum Teil preisgekrönten Programmierern, die sich in der Branche einen Namen gemacht, bei bedeu-tenden Unternehmen gearbeitet oder auch sel-ber Programmiersprachen entwickelt haben. Sie lassen den Leser ganz offen an ihren Erfahrungen in der Softwarebranche, ihrem Programmierall-tag und ihrem beruflichen Werdegang teilhaben. Neben zahlreichen Anekdoten beschreiben sie auch lehrreiche sowie leidvolle Erlebnisse ihrer Laufbahn, erläutern ihre Auffassung von gutem Programmierstil und gewähren darüber hinaus viele besondere Einblicke in die Gedankenwelt erfolgreicher Programmierer.

    Peter Seibel stellt in den Interviews Fragen zu zahlreichen Dingen, die Programmierer nor-malerweise für sich behalten. Sie verraten der Außenwelt, welche Gedanken sie sich machen, was sie im Hinblick auf die Programmierung wichtig finden, wie sie das Programmieren – teil-weise autodidaktisch – erlernt und sich im Laufe der Zeit verbessert haben, was andere von ihnen lernen können und wie sie die Zukunft der Soft-warebranche sehen.

    Über den Autor:Peter Seibel war als Java-Programmierer einer der ersten Mitarbeiter von WebLogic und hat außerdem für das Mother Jones Magazine in Perl programmiert. Er ist Autor des Buches Practical Common Lisp und lebt in Kalifornien.

    ISBN 978-3-8266-9103-4

    Coders at Work Bedeutende Programmierer und ihre Erfolgsgeschichten

    15 Interviews mit bedeutenden Programmierern

    Persönliche Erfahrungen, Werde- gang und Lebensgeschichten

    Gedanken über die Programmie- rung und die Zukunft der

    Softwarebranche

    http://www.mitp.de/9103http://www.mitp.de/9163

  • www.mitp.de

    Bleiben Sie in Kontakt.

    Hier fi nden Sie alle unsere Bücher, kostenlose Leseproben und ergänzendes Material zum Download.

    www.facebook.com/mitp.verlag

    Finden Sie uns auf Facebook:

    www.twitter.com/mitp_verlag

    Folgen Sie uns auf:

    Auf Twitter und Facebook erfahren Sie Neues aus dem Verlag und zu unseren Produkten.

    http://www.mitp.dehttp://www.facebook.com/mitp.verlaghttp://www.twitter.com/mitp_verlaghttp://www.mitp.de/9163

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 150 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile (None) /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName (http://www.color.org) /PDFXTrapped /Unknown

    /CreateJDFFile false /Description >>> setdistillerparams> setpagedevice

    Copyright: © des Titels »Land of Lisp« (ISBN 978-3-8266-9163-8) 2011 by Verlagsgruppe Hüthig Jehle Rehm GmbH, Heidelberg. Nähere Informationen unter: http://www.mitp.de/9163