Clojure Standard Library
An annotated reference
Renzo Borgatti
  • MEAP began December 2016
  • Publication in Early 2019 (estimated)
  • ISBN 9781617293580
  • 625 pages (estimated)
  • printed in black & white

The Clojure standard library is a treasure trove of functions and macros that have been battle-tested over the years to solve the most challenging programming problems. Knowing what's available in the standard library not only liberates programmers from mundane tasks like connecting to data sources, parsing XML, dealing with numbers but also more advanced problems like handling concurrency and parallelism. Having a deep knowledge of the Clojure standard library helps you solve problems quickly and more efficiently.

Clojure Standard Library is an extensive reference to the standard library but it doesn't read as a dull list of functions. In addition to providing clear explanations for each topic, this guide is full of real-world examples, links, and background information. The book approaches difficult topics by illustrating them in a readable and pleasant way, using visual structure to emphasize the essential information. The book is designed to be used as a reference, but each function provides an interesting reading on its own, offering insight into functional and general programming. By using this reference, you will be able to make the most idiomatic and efficient choice while developing a Clojure application.

Table of Contents detailed table of contents

Part 1: Introduction

1. Know Your Tools

1.1. Why should I care about the Standard Library?

1.2. Aren’t specifications just plain boring?

1.3. The different versions of Clojure

1.4. The Clojure Standard Library

1.5. Making Your Development Life Easier

1.6. The problem of fragmented information

1.7. The well kept secret of the Clojure Ninja

1.8. The perfect companion book

1.9. Summary

Part 2: Fundamentals

2. Creating and manipulating functions

2.1. Function definition

2.1.1. defn and defn-

2.1.2. fn

2.1.3. fn*

2.2. Higher order functions

2.2.1. fnil

2.2.2. comp

2.2.3. complement

2.2.4. constantly

2.2.5. identity

2.2.6. juxt

2.2.7. memfn

2.2.8. partial

2.2.9. every-pred

2.2.10. some-fn

2.3. Threading macros

2.4. ->

2.5. ->>

2.6. as->

2.7. cond->

2.8. cond->>

2.9. some->

2.10. some->>

2.11. Function execution

2.11.1. apply

2.11.2. memoize

2.11.3. trampoline

3. Basic Constructs

3.1. Lexical Binding

3.1.1. let and let*

3.1.2. if-let, when-let, if-some and when-some

3.1.3. letfn and letfn*

3.2. Boolean Operators

3.2.1. not

3.2.2. and, or

3.3. Conditional Branching

3.3.1. if, if-not, when and when-not

3.3.2. cond

3.3.3. condp

3.3.4. case and case*

3.4. Iteration and loops

3.4.1. loop, recur and loop*

3.4.2. range

3.4.3. for

3.5. A Glimpse of Collection Processing

3.5.1. first, second and last

3.5.2. map and map-indexed

3.5.3. filter and remove

3.5.4. reduce and reductions

4. Creating and inspecting macros

4.1. defmacro

4.2. macroexpand, macroexpand-1 and macroexpand-all

4.3. quote

4.4. gensym

4.5. definline

4.6. destructure

4.7. clojure.template/apply-template

4.8. clojure.template/do-template

5. Operations on Numbers

5.1. +, -, * and /

5.2. inc and dec

5.3. quot, rem and mod

5.4. max and min

5.5. max-key and min-key

5.6. rand and rand-int

5.7. with-precision

5.8. +', -', *', inc' and dec'

5.9. unchecked-add, unchecked-subtract, unchecked-multiply, unchecked-inc, unchecked-dec and unchecked-negate

5.10. unchecked-add-int, unchecked-add-int, unchecked-subtract-int, unchecked-multiply-int, unchecked-divide-int, unchecked-inc-int, unchecked-dec-int, unchecked-negate-int and unchecked-remainder-int

6. Comparison and Equality

6.1. = (equal) and not= (not equal)

6.2. = (double equal)

6.3. < (less than), > (more than), <= (less than or equal) ( and >= (more than or equal)

6.4. compare

6.5. identical?

6.6. clojure.data/diff

Part 3: Data Structures

7. Reducers and Transducers

7.1. Reducers

7.1.1. fold

7.1.2. reducer and folder

7.1.3. monoid

7.1.4. foldcat, cat and append!

7.2. Transducers

7.2.1. transduce

7.2.2. eduction

7.2.3. completing

7.2.4. cat

7.3. reduced, reduced?, ensure-reduced, unreduced

8. Collections

8.1. Basics

8.1.1. into

8.1.2. count

8.1.3. nth

8.1.4. empty

8.1.5. every?, not-every?, some and not-any?

8.1.6. empty? and not-empty

8.2. Polymorphic

8.2.1. conj

8.2.2. get

8.2.3. contains?

8.3. General purpose

8.3.1. rand-nth

8.3.2. shuffle

8.3.3. random-sample

8.3.4. frequencies

8.3.5. sort and sort-by

8.3.6. group-by

8.3.7. partition, partition-all and partition-by

8.3.8. flatten

8.3.9. distinct, dedupe and distinct?

8.3.10. replace

8.3.11. reverse

9. Sequential Generation

9.1. Sequential Types

9.1.1. seq and sequence

9.1.2. rseq

9.1.3. seque

9.2. Abstract Generators

9.2.1. repeatedly

9.2.2. iterate

9.2.3. repeat and cycle

9.3. Other Generators

9.3.1. lazy-seq

9.3.2. tree-seq

9.3.3. file-seq

9.3.4. xml-seq

9.3.5. re-seq

9.3.6. line-seq

9.3.7. resultset-seq

9.3.8. iterator-seq and enumeration-seq

9.3.9. concat and lazy-cat

10. Sequential Processing

10.1. rest, next, fnext, nnext, ffirst, nfirst and butlast

10.2. drop, drop-while, drop-last, take, take-while, take-last, nthrest, nthnext

10.3. keep and keep-indexed

10.4. mapcat

10.5. interleave

10.6. interpose

10.7. take-nth

10.8. split-at and split-with

10.9. subseq and rsubseq

10.10. when-first

10.11. chunk, chunk-cons, chunk-first, chunk-rest, chunk-next, chunk-buffer and chunk-append

11. Maps

11.1. Creating

11.1.1. hash-map

11.1.2. array-map

11.1.3. sorted-map and sorted-map-by

11.1.4. zipmap

11.2. Accessing

11.2.1. keys and vals

11.2.2. find, key and val

11.2.3. select-keys and get-in

11.3. Processing

11.4. assoc, assoc-in and dissoc

11.5. update and update-in

11.6. merge and merge-with

11.7. reduce-kv

11.9. clojure.set/index

11.10. clojure.walk/keywordize-keys and clojure.walk/stringify-keys

11.11. rename-keys

11.12. map-invert

12. Vectors

12.1. vector

12.2. vec

12.3. peek and pop

12.4. vector-of

12.5. mapv

12.6. filterv

12.7. subvec

13. Sets

14. Others

What's inside

Each function or macro is presented with:

  • An introduction including areas of application and main goals
  • A more rigorous contract section, including parameters and return types
  • Real world examples of the function in action
  • Background and conceptual information necessary to better understand the function
  • Diagrams and comparison tables
  • Implementation details and performance implications

About the reader

For developers of all skill levels who need a thorough reference to Clojure standard library.

About the author

Renzo Borgatti is a software engineer with more than 15 years of experience in the field. Renzo worked with Java, Ruby, and Objective-C before discovering Clojure and functional programming a few years ago, a passion that quickly turned into professional work. He's a frequent speaker at user groups and conferences.


Manning Early Access Program (MEAP) Read chapters as they are written, get the finished eBook as soon as it’s ready, and receive the pBook long before it's in bookstores.
buy
MEAP eBook $47.99 pdf + ePub + kindle + liveBook

FREE domestic shipping on three or more pBooks