We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

The latest version of the book is P1.0, released over 2 years ago. If you've bought a PDF of the book and would like to upgrade it to this version (for free), visit your home page.

Key: Typo Tech. Error Suggestion Not a problem Next edition

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:  

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
All

#47623: My ebook reader on android (aldiko) can't import the epub version into my library, because some information seems to be set like in the first edition.--abp

B1.0
22-Sep-11
N/A

#50423: .mobi version of the file does not contain index.--Hiro Asari

P1.0
30-Dec-12
xxi

#49674: I would lighten up the grey used in the background blocks, for readability.--Rich Morin

P1.0
15-Aug-12
xxii

#50390: The second introductory REPL sample is missing a new line in

user=> (+ 2 2) ; input line with namespace prompt-> 4 ; return value--Rainer Dreyer

Relevance, Inc says: Duplicate of #49657
P1.0
18-Dec-12
xxii

#49657: A newline is needed between "... with namespace prompt" and "-> 4 ...".--Rich Morin

P1.0
15-Aug-12
1

#47996: The cover on the epub version on page 1 on the nook touch is not scaled to the visible area of the nook.--Steven Proctor

B3.0
21-Nov-11
1
#49131: The ebook reader on my Android tablet shows an incorrect thumbnail, it shows "SQL Antipatterns", i.e. images/_covers/bksqla.jpg (the 1st withi...more...
P1.0
18-Apr-12
4
#49545: In the description of how the Clojure function blank? works, you don't describe what it does with an empty string. It seems obvious that if e...more...
P1.0
20-Jul-12
7

#49664: I would indent the lines beginning "((> x ..." and "(> x ...".--Rich Morin

P1.0
15-Aug-12
9

#49658: The sentence beginning "Clojure provides a ..." contains four instances of a superfluous space following an opening parenthesis, eg: "( on page 115)".--Rich Morin

P1.0
15-Aug-12
10
#48926: In the book it states, "...but notice that in the following code the Clojure version has both fewer dots and fewer parentheses than the Java v...more...
B5.0
11-Mar-12
10
#51355: In: "but notice that in the following code the Clojure version has both fewer dots and fewer parentheses than the Java version: // Java ...more...
P1.0
21-Apr-13
15

#48471: The hello user with memory example is incomplete and so is the associated source code. It seemed fine in the previous release (i.e. b3).--David Sweeney

B4.0
06-Jan-12
16
#49035: Link for the Github Repo in the footnote probably isn't the up to date code. Please update it with the latest or totally remove it. Wasted an ...more...
B5.0
30-Mar-12
17

#47997: In the epub version on the nook touch, footnotes 3 and 4 on page 17 do not have the full url it stops after the "//".--Steven Proctor

B3.0
21-Nov-11
24

#49662: I would change "... for the dividend." to "... for the dividend or the divisor.".--Rich Morin

P1.0
15-Aug-12
25

#49663: The word "Namespaces" should be hyphenated as "Name-spaces", rather than "Names-paces".--Rich Morin

P1.0
15-Aug-12
26
#47991: URLs in footnotes (as on this page, but there are others) are missing the ':' after 'http'. The linked URL itself is correct, i.e. the hyperli...more...
Aaron and Stuart says: What version are you using? I don't see this in the pdf version.
B3.0
20-Nov-11
29
#48863: Where is says “To run Clojure and the code in this book, you need two things:” I think it would be beneficial to say you need 3 things instea...more...
B5.0
02-Mar-12
30
#49978: Instantiating the record, (->Book "title" "author"), returns an error: "java.lang.Exception: Unable to resolve symbol: ->Book in this context"...more...
P1.0
22-Oct-12
30

#49661: The period (just before the colon) in "... a record with user.Book.:" seems out of place and is confusing. Please change and/or explain this.--Rich Morin

P1.0
15-Aug-12
31

#53192: Add index entry for #() anonymous-function notation--Phill

P1.0
22-Nov-13
31

#53193: Add index entry for #"" regular-expression notation--Phill

P1.0
22-Nov-13
32
#48793: I also tested the code and the following does not work (defrecord Book [title author]) (->Book "title" "author") I then tried the followi...more...
B4.0
21-Feb-12
36
#49659: In the section "When to Use Anonymous Functions", I'd like to see some discussion of the benefits of named functions (eg, decomposition of cod...more...
P1.0
15-Aug-12
37

#49660: Change "... the var bound to ..." to "... the var that is bound to ...".--Rich Morin

P1.0
15-Aug-12
40
#53150: for destructuring forms, the ref to the `let` doc is misleading,since currently the special_forms documentation has a specific "Binding Forms ...more...
P1.0
14-Nov-13
42

#49665: The word "namespace" should be hyphenated as "name-space", rather than "names-pace".--Rich Morin

P1.0
15-Aug-12
42
#47585: Found another instance of a "word" being highlighted as if it were a function when it isn't being referenced as one in the require form just p...more...
Aaron and Stuart says: This is a case where str is a function in clojure.core and the clojure mode highlighting is picking that up. I'll see if they can add a case for this in the syntax highlighter.
B1.0
16-Sep-11
43

#49666: In "... into a Clojure Var:", I do not think "Var" should be in monospace font, nor that the "v" should be capitalized.--Rich Morin

P1.0
15-Aug-12
43

#49667: It would be useful to clarify that nextInt is a _Java_ method, eg: "The . can call Java methods."--Rich Morin

P1.0
15-Aug-12
45

#49668: I would expand "... from REPL when exploring." to "... from the REPL when you are exploring."--Rich Morin

P1.0
15-Aug-12
45
#49669: The sentence "If the first argument to if is logically false, it returns nil:" is a bit awkward and potentially confusing. How about changing ...more...
P1.0
15-Aug-12
46

#49670: "The Swiss Army knife of flow control in Clojure is loop:" seems awkward. How about "loop is the Swiss Army knife of flow control in Clojure:"?--Rich Morin

P1.0
15-Aug-12
48
#48010: In the epub version on the nook touch, Table 1, the underline of "Using Numeric Types" for the link is not under that part of the text, but sp...more...
B3.0
22-Nov-11
48
#48099: Can't turn past page 48 on the kobo ebook reader. Crashes the reader and forces a reboot. If I go to page 100, and then attempt to go to pag...more...
B3.0
01-Dec-11
49
#48823: The use of -> to represent the result of an evaluation is somewhat confusing as there is a macro that uses same symbol. So if you try searchi...more...
B5.0
28-Feb-12
52

#53144: the metadata tag attached to the argument `s`
seems to make no visible difference, as :tag
merely shows the tag attached to the retval.

P1.0
13-Nov-13
57

#53195: Add index entry for "inner class, notation for name of" --Phill

P1.0
22-Nov-13
58
#49671: The discussion of traversal order in maps and sets seems out of place. It _follows_ several examples which show (but do not explain) that the...more...
P1.0
15-Aug-12
60
#48848: Example on page 60 where you are explaining how maps can be treated as sequences too: (first {:fname "Aaron" :lname "Bedra"}) -> [:lname "...more...
B5.0
01-Mar-12
61

#49672: The bullet item "Sequence predicates" could be written as "Functions that test sequences".--Rich Morin

P1.0
15-Aug-12
61
#49110: Based on the result of (doc range), 'end' is optional, defaulting to infinity if not provided. The definition of 'range' in the pdf implies...more...
P1.0
14-Apr-12
64

#49673: "its argument is vowel." should be "its argument is a vowel.".--Rich Morin

P1.0
15-Aug-12
67
#49300: I was using Clojure 1.4.0 with the book. Clojure 1.4.0 is a newer version so it could be the Clojure 1.4.0 run-time causing the error. F...more...
P1.0
10-May-12
67

#49301: PLEASE IGNORE ISSUE 49300.
I MISTYPED SOME CODE.
This was me being stupid.--G R Smith

P1.0
10-May-12
68

#49675: I would change "[according to format instructions]." to "[according to format instructions] [the] word."--Rich Morin

P1.0
15-Aug-12
69
#48402: at the end of the page "As an example of how much more general the functional index-of-any is, you could use code what we just wrote to find ...more...
B4.0
26-Dec-11
73

#49676: The format of the example output "-> [Ljava.io.File;@..." does not match what I get from the REPL: "#<File[] [Ljava.io.File;@...>".--Rich Morin

P1.0
15-Aug-12
73
#53149: (import '(java.io File)) (.listFiles (File. ".")) -> [Ljava.io.File;@1f70f15e The syntax (Class. foo) to invoke a java ctor is used here...more...
P1.0
14-Nov-13
76
#76495: Section 3.1 "Everything Is a Sequence". Examples: (first {:fname "Aaron" :lname "Bedra"}) and (rest {:fname "Aaron" :lname "Bedra"}) have outp...more...
P1.0
08-Mar-14
78

#49677: The drop/take combination also differs from subvec in that it takes different arguments and is called quite differently.--Rich Morin

P1.0
15-Aug-12
78
#48016: Page 78 on epub on nook touch. Table 2. is getting cut off. the table title stops after "functional", and the last column is "Variables". T...more...
B3.0
22-Nov-11
80

#49678: I would change "... only the keys passed in." to "... only the pairs for the keys that were passed in.".--Rich Morin

P1.0
15-Aug-12
87
#48403: It might help clarify the power of "for" from map in the example by showing how map differs. user=> (map #(format "%c%d" %1 %2) "ABCDEFGH...more...
B4.0
26-Dec-11
92
#49679: In the tail-fibo code block, "next" is emboldened each time it appears. However, "next" is simply a parameter to the local function fib, not t...more...
P1.0
15-Aug-12
95

#49680: I would add a usage example after the fibo definition, eg: "(take 5 (fibo))".--Rich Morin

P1.0
15-Aug-12
96
#48953: Under the section Tail Recursion, in the code listing for the 'tail-fibo' function, the formatting rules appear to be that the bold magenta fo...more...
B5.0
17-Mar-12
96
#48807: In the tail-fibo example: (fib 0N 1N n))) Causes this error in lein repl: java.lang.NumberFormatException: Invalid number: 0N java.l...more...
B4.0
25-Feb-12
100

#49681: There is an extra space following the first :t in "[:h :t :t ...", three times on this page.--Rich Morin

P1.0
15-Aug-12
109
#48017: Page 109 in epub on nook touch. The section title for 3.5 is cut off from rendering, and does not wrap. It shows "3.5 Calling Structure-Speci...more...
B3.0
22-Nov-11
111
#76325: The second paragraph makes this suggestion "Rebind m and f to memoized versions of themselves, using Clojure’s memoize function", but if I'm t...more...
P1.0
22-Jan-14
114

#49682: I would change "... power into cores." to "... power into individual processing cores."--Rich Morin

P1.0
15-Aug-12
114

#49683: I think that "complect" deserves more than just a footnote. How about an explanatory block?--Rich Morin

P1.0
15-Aug-12
115
#49684: In the paragraph beginning "Clojure's model for ...", the word model is used several times with varying (though related) meanings. This seems ...more...
P1.0
15-Aug-12
115

#49374: In the second paragraph, last sentence it says "...and not ask yourself...". That should be 'now' instead of 'not'.--Michael C

P1.0
26-May-12
116
#49685: It might be useful to show that the prior value persists after a ref-set call. For example, "(def snap current-track)" before the ref-set and ...more...
P1.0
15-Aug-12
116
#53159: I believe the description of "atomic" transactions is wrong. The description for atomic is actually roughly quivalent to the "isolated" prop...more...
P1.0
16-Nov-13
118
#50439: In my version of the text,`(alter ref update-fn & args...)` has the word `ref` typeset in bold purple, which makes it appear to be the Clojure...more...
P1.0
05-Jan-13
119
#50440: My version of `(commute ref update-fn & args...)` has `ref` in bold purple. This is confusing because it makes it appear that `ref` is a 'buil...more...
P1.0
05-Jan-13
125
#49512: I'm not sure if this is a change from 1.3 to 1.4, but I don't see a change-note in 1.4, so … See: After the agent tries to update itself...more...
P1.0
11-Jul-12
127

#49687: "in the following tabler." should be "in the following table."--Rich Morin

P1.0
15-Aug-12
127
#53196: I think maybe the top row of the table is what the sentence below the table refers to with "the unified update model is the most important way...more...
P1.0
22-Nov-13
127

#49122: Last word of the first paragraph under 5.4's "The Unified Update Model"

"Tabler" should be "Table"--Cameron Donaldson

P1.0
16-Apr-12
128
#53163: the inclusion of metadata tag ^:dynamic in `(def ^:dynamic foo 10)` is distracting. it's not explained, nor even mentioned, it's unclear wheth...more...
P1.0
17-Nov-13
130
#48027: The Sharp is not getting rendered after the C and the flat is not getting rendered after the D. Those are non-printable characters it would s...more...
B3.0
23-Nov-11
131
#49788: in manual has printed an old form for : ...... (startElement [uri local-name q-name #^Attributes atts] .......... the form #^..... ...more...
P1.0
07-Sep-12
134
#48780: The sentence "When you call def or defn, you create a dynamic var, often called just a var." is somewhat misleading. A var is only dynamic ...more...
B4.0
19-Feb-12
140

#49127: "Line 15 returns a vector with the snake, apple, and time"

should read

"Line 15 returns a vector with the snake, apple, and timer"--Cameron Donaldson

P1.0
18-Apr-12
147
#50790: (definterface IOFactory (^java.io.BufferReader make-reader [this]) (^java.io.BufferedWriter make-writer [this])) should be : (de...more...
P1.0
13-Feb-13
147
#49806: in (definterface IOFactory has an error in: (^java.io.BufferReader make-reader [this]) ...... correct in (^java.io.Buf...more...
P1.0
14-Sep-12
150

#49804: in
make-writer[dst]
for URL is wrong
(->dst .getPath FileInputStream.)

correct :
(->dst .getPath FileOutputStream.)

--ugo vierucci

P1.0
14-Sep-12
150

#49807: after :

Now let's put it all together

add the row
src/examples/io.clj
in reversed mode as in previous pages

--ugo vierucci

P1.0
14-Sep-12
150
#48018: Page 150 in epub on nook touch. Chapter 5. The title of the chapter is cut off and not rendering the complete chapter name. It is rendering...more...
B3.0
22-Nov-11
150
#49066: very very minor suggestion - I think the line "Clojure’s spit and slurp I/O functions are built on two abstractions, reading and writing." at ...more...
B5.0
05-Apr-12
151

#49805: in
make-writer [dst ]
for URL has an error in:
(-> dst .getPath FileInputStream.)
correct in
(-> dst .getPath FileOuputStream.)
--ugo vierucci

P1.0
14-Sep-12
155
#49808: in (ns examples.cryptovault_complete (:require [clojure.java.io :as io] [examples.protocols.io :as proto]) ....................more...
P1.0
14-Sep-12
157

#76778: C (C sharp) should be C# (C sharp)
D (D flat) should be Db (D flat)
D half note should be D# half note--art g

P1.0
09-May-14
161
#48015: Page 161 of epub on nook touch. The cryptovault.clj code formatting is off with the line wraps weird. The "... define method body here ...)"...more...
B3.0
22-Nov-11
162 180
#76769: In section 6.6 - when calling reify on MidiNote there are a number of errors in the generator.clj implementation. All the functions defined in...more...
P1.0
06-May-14
166
#48431: This may or may not be a technical error but even when copy-and-pasting sample code (and/or typing it manually from the book) I get the follow...more...
B4.0
30-Dec-11
174 160

#48890: src/examples/cryptovault.clj

(init-vault [vault]

should read

(defn init-vault [vault]

--Ernesto Schirmacher

B5.0
05-Mar-12
175 161
#48891: The two method definitions in the code listings are missing the defn: (vault-output-stream [vault] SHOULD READ (defn vault-output-stream [...more...
B5.0
05-Mar-12
177 159
#49770: It's just the absence of the final closing parenthesis: (extend-type Note MidiNote (to-msec [this tempo] (let [duration-to-bpm {...more...
P1.0
30-Aug-12
178
#53185: There's a distinction to be made between special forms hardcoded into the language evaluator, and macro invocation where args are evaulated ...more...
P1.0
20-Nov-13
179 161
#49771: Got this error with the dot syntax for a new instance: user=> (perform (for [velocity [64 80 90 100 110 120]] (assoc (Note. :D 3 1/2) :vel...more...
P1.0
30-Aug-12
184
#53186: up to this point in the book, no discussion or mention of exceptions/try/finally has been made. the comment on "using a finally block" lacks...more...
P1.0
20-Nov-13
184
#76494: Section 3.1 "Everything Is a Sequence". Examples: (first {:fname "Aaron" :lname "Bedra"}) and (rest {:fname "Aaron" :lname "Bedra"}) have outp...more...
P1.0
08-Mar-14
190

#52018: prose concerns my-print, code example uses my-println instead:

"
Unsurprisingly, attempts to call my-print will fail:
(my-println "foo")
"
--giles

P1.0
17-Jun-13
201
#48530: You use ::acc/Checking in the namespace corresponding to the one aliased to acc in namespace user. Besides this, I think it is confusing to us...more...
B4.0
15-Jan-12
217

#76529: (defn painstakingly-create-array []
...
(aset arr2 "fill)
---------^--Frei zhang

P1.0
12-Mar-14
232 217
#49887: There is a typo in the function: (aset arr2 "fill") (defn painstakingly-create-array [] (let [arr (make-array String 5)] (aset arr 0 "Pai...more...
P1.0
26-Sep-12
235

#51191: 3rd line:
- How hard is it write a program
should be:
- How hard is it to write a program--Roman

P1.0
02-Apr-13
237
#51192: Last line is: (< 0 (matches score) (count secret))) Should be `<=` instead of `<`, as the range for the number of matches should include t...more...
P1.0
02-Apr-13
240 225

#50189: This does not work on windows "java -cp .:pinger-0.0.1-standalone.jar pinger.core". The classpath uses ';' semi colons on windows.--Robin Luiten

P1.0
21-Nov-12
240

#51190: First line:
- test-namespaces takes on more namespaces
should be:
- test-namespaces takes one or more namespaces--Roman

P1.0
02-Apr-13
243
#51193: The command `lein plugin install lein-noir 1.2.0` no longer works. In Leiningen 2.x plugins should be specified in `project.clj` or `~/.lein/p...more...
P1.0
02-Apr-13
243

#51194: `lein noir new clojurebreaker`
should be
`lein new noir clojurebreaker`--Roman

P1.0
02-Apr-13
249

#49688: The "Git" heading needs to be swapped with the paragraph "This will provide ...".--Rich Morin

P1.0
15-Aug-12
253 238
#49912: The name of the function is wrong: (scoring-is-bound-by-number-of-pegs secret guess (game/score secret guess)) This should be: (scori...more...
P1.0
02-Oct-12
260

#53194: Index entry for "extend" should also "see proxy"--Phill

P1.0
22-Nov-13
262

#49689: Add an index entry for load-file.--Rich Morin

P1.0
15-Aug-12