Chapter 1. Introduction to Clojure
1.2. Understanding Clojure syntax
1.3. The sources of Clojure’s power
1.3.2. Clojure and functional programming
1.3.5. More advantages of Clojure
2.4.1. nil, truth, and falsehood
Chapter 3. Building blocks of Clojure
Chapter 4. Polymorphism with multimethods
4.2.1. Single and double dispatch
Chapter 5. Clojure and Java interop
5.1. Calling Java from Clojure
5.1.1. Importing Java classes into Clojure
5.2. Compiling Clojure code to Java byte code
5.2.1. Example–a tale of two calculators
5.2.2. Creating Java classes and interfaces using gen-class and gen-interface
Chapter 6. State and the concurrent world
6.8. State and its unified access model
Chapter 7. Evolving Clojure through macros
7.2. Macros from within Clojure
Chapter 8. Test-driven development and more
8.2. Mocking and stubbing things
Chapter 9. Data storage with Clojure
9.1.1. ActiveRecord, users, and charges
Chapter 10. Clojure and the web
10.1. An HTTP interface from scratch
Chapter 11. Scaling through messaging
11.2.2. Connecting to RabbitMQ
11.3. Distributed parallel programming
11.3.1. Creating remote workers
11.3.2. Servicing worker requests
11.3.3. Putting it all together
Chapter 12. Data processing with Clojure
12.1.1. Getting started with map/reduce—counting words
12.1.2. Generalizing the map/reduce
12.2. Master/slave parallelization
Chapter 13. More on functional programming
13.1. Using higher-order functions
13.1.1. Collecting results of functions
13.2. Partial application and currying
13.3.1. Free variables and closures
Chapter 14. Protocols, records, and types
14.3. Protocols and data types
Chapter 15. More macros and DSLs
15.2. Domain-specific languages
18.191.54.245