Inhaltsverzeichnis

1  Einleitung
 1.1  Geschichte
  1.1.1  Mehr Moore
  1.1.2  Java
  1.1.3  Lisp
 1.2  Für wen ist dieses Buch?
 1.3  Warnung
 1.4  Verwendete Version von Clojure
 1.5  Über dieses Buch
  1.5.1  Aufbau
  1.5.2  Typografische Richtlinien
  1.5.3  Zu den Beispielen
  1.5.4  Formale Syntaxbeschreibungen
  1.5.5  Produktionshinweise
 1.6  Danksagungen
2  Die Sprache
 2.1  Wesentliche Eigenschaften
  2.1.1  Funktional
  2.1.2  Lisp
  2.1.3  Java Virtual Machine
  2.1.4  Interaktive Entwicklung
  2.1.5  Concurrent Programming
 2.2  Grundkurs in Lisp
 2.3  REPL
 2.4  Dokumentation
 2.5  Java verwenden
 2.6  Datentypen
  2.6.1  Funktionen
  2.6.2  Boolesche Typen
  2.6.3  Text
  2.6.4  Zahlen
  2.6.5  Symbole und Schlüsselwörter
  2.6.6  Datenstrukturen
 2.7  Variablenbindungen und Namensräume
  2.7.1  Var
  2.7.2  Namensräume
  2.7.3  Lokale Variablenbindung
  2.7.4  Dynamisch gebundene Variablen
  2.7.5  Zerlegende Variablenbindung
 2.8  Ausgabe
 2.9  Gleichheit, Wahrheit und Null
 2.10  Bedingte Anweisungen
 2.11  Exceptions
 2.12  Anweisungen
  2.12.1  Funktionen
  2.12.2  Spezielle Operatoren
  2.12.3  Makros
  2.12.4  Mehrfachmethoden
 2.13  Reguläre Ausdrücke
 2.14  Rekursion
 2.15  Metadaten
 2.16  Sequences
  2.16.1  Laziness
  2.16.2  Funktionen für Sequences
  2.16.3  Sequences und reguläre Ausdrücke
  2.16.4  Erzeugen von Lazy Sequences
 2.17  Verschiedenes
  2.17.1  Closures
  2.17.2  Mehr Funktionen
  2.17.3  List Comprehension
  2.17.4  Fädeloperator
 2.18  Vom Quelltext zum Resultat
  2.18.1  Quelltext
  2.18.2  Reader
  2.18.3  Evaluation
  2.18.4  Resultat
3  Concurrency
 3.1  Zustand und Zeit
 3.2  Besonderheiten der Datenstrukturen
  3.2.1  Unveränderlichkeit
  3.2.2  Hintergrund: Persistente Datenstrukturen
 3.3  Handhabung veränderlicher Identitäten
  3.3.1  Gängige Modelle
  3.3.2  Indirekte Referenzen
 3.4  Referenztypen
  3.4.1  Var
  3.4.2  Atom
  3.4.3  Ref
  3.4.4  Agent
  3.4.5  Validierung
  3.4.6  Watcher
  3.4.7  Zusammenfassung
 3.5  Threads
  3.5.1  Methoden von Java
  3.5.2  Clojures Future
  3.5.3  Parallelisierung
 3.6  Transiente Datenstrukturen
 3.7  Hintergrund: Clojures STM
  3.7.1  Wissenswertes
  3.7.2  Fallstricke
 3.8  Beispiel: Genetischer Algorithmus
4  Java
 4.1  Java aus Clojure
  4.1.1  Konstruktoren und Methoden
  4.1.2  Weitere Funktionen auf Objektinstanzen
  4.1.3  Java-Arrays
 4.2  Interfaces und abgeleitete Klassen
  4.2.1  Proxy
  4.2.2  Klassen kompilieren
 4.3  Beispiel: Plot einer Bifurkation
 4.4  Clojure als Skriptsprache
 4.5  Clojure ist auch eine Bibliothek
  4.5.1  Sequences
  4.5.2  Persistente Datenstrukturen
  4.5.3  STM
  4.5.4  Fazit
 4.6  Tuning und HotSpot
 4.7  Auslieferung
 4.8  Hintergrund: Details zur Implementation
  4.8.1  Layout des Quelltexts
  4.8.2  Metaprogrammierung
5  Protocols und Datatypes
 5.1  Expression Problem
 5.2  Abstraktionen: Protocols
 5.3  Konkretisierungen: Datatypes
  5.3.1  Types
  5.3.2  Records
  5.3.3  Anonyme Typen
 5.4  Fazit
6  Bibliotheken
 6.1  Input/Output
 6.2  XML
  6.2.1  Kernfunktionen
  6.2.2  Lazy XML
 6.3  Automatisierte Softwaretests
 6.4  Externe Programme
 6.5  Inspector
 6.6  Durchlaufen von Bäumen
 6.7  REPL-Utils
 6.8  Pretty Print
 6.9  Trace
 6.10  SQL
 6.11  Dataflow
 6.12  Abschluss
7  Fazit
 7.1  Kritik
 7.2  Clojures Zukunft
 7.3  Vorhang