Errata for Programming Clojure (2nd edition)
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 about 1 year 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.
| 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 |
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 |
||
| 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 |
||
| 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 |
||
| 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.
|
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 |
||
| 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 |
||
| 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 |
||
| 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 |
#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 |
||
| 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
correct :
--ugo vierucci |
P1.0
14-Sep-12 |
||
| 150 |
#49807: after :
add the row
--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
|
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 |
||
| 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 |
||
| 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 |
|
| 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 |
|
| 190 |
#52018: prose concerns my-print, code example uses my-println instead: "
|
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 |
||
| 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:
|
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:
|
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`
|
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 |
|
| 262 |
#49689: Add an index entry for load-file.--Rich Morin |
P1.0
15-Aug-12 |
||
| 2008 | YSwAP |
#50106: Java doesn’t surprise me at all. At least in the “professional” setocr, nearly every company still relies on Java. Many never heard of alterna...more...
|
P1.0
01-Nov-12 |

