View
1
Download
0
Category
Preview:
Citation preview
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
Recommended