small medium large xlarge

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.

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

If you've found a new error, please submit it.

  • Typo
  • Tech. error
  • Suggestion
  • Maybe next edition
  • Not a problem
  • Reported in: P1.0 (10-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78808
PDF page: 7
"When defining constructors with optional arguments, you can use destruc- turing1 for clarity [example] This allows any number of optional arguments, ...more...
Ben Vandgrift says: Thanks! We'll get this fixed in the next printing.
  • Reported in: P1.0 (29-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78866
PDF page: 9
(make-money) doesn't return a money record with a Currency, but with a keyword. So: #user.Money{:amount 0, :currency :usd} instead of the expect...more...
Ben Vandgrift says: Thanks for letting us know. This will be straightened out in the next printing.
  • Reported in: P1.0 (29-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78867
Paper page: 9
In your definition of the function make-money, the one-parameter form of the function passes in the keyword symbol :usd as the default currency value,...more...
Ben Vandgrift says: Thanks for letting us know. This will be straightened out in the next printing.
  • Reported in: P1.0 (04-May-17)
#81518
PDF page: 9
(make-money) will not produce given output ;-> #money.Money{:amount 0, :currency #money.Currency{:divisor 100, :sym "USD", :desc "US Dollars"}} in...more...
  • Reported in: P1.0 (08-Oct-15)
  • Fixed: 09-Oct-15, awaiting book release
#78973
PDF page: 9
(defn make-money ([] (make-money 0)) ([amount] (make-money amount :usd)) ([amount currency] (->Money amount currency))) This supplies `:usd` as ...more...
  • Reported in: P1.0 (06-Apr-17)
#81360
Paper page: 11
In the second (def) (for "apollo-11"), the "true" value is combined on the same line as the launched date. In the previous example ("apollo-4") these...more...
  • Reported in: P1.0 (09-May-16)
#80301
Paper page: 12

with-open is used on a BufferedImage, which results in an exception (close field not found) when calling make-planet-image.--qrthey

  • Reported in: P1.0 (08-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#78974
PDF page: 15
For example, a Recipe might have multiple authors. In this case, we may not want to rely on nesting at instead refer to an entity by a well-known iden...more...
Ben Vandgrift says: Good catch, thanks! This'll be fixed in the next printing.
  • Reported in: P1.0 (26-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#79056
PDF page: 17

lack of closing bracket in code example

(ns ch1.validate
(:require [schema.core :as s])

--Sergiy BONDARYEV

Ben Vandgrift says: Thanks! This'll be fixed in the next printing.
  • Reported in: P1.0 (10-May-17)
#81531
PDF page: 23

It says "Clojure doesn’t allow protocols to extend protocols", but actually it's possible and doesn't raise any exception. --Alex

  • Reported in: B6.0 (25-Aug-15)
  • Fixed: 21-Apr-16, awaiting book release
#78780
PDF page: 26
In the code... (defn make-money ([] (make-money 0)) ([amount] (make-money amount :usd)) ([amount currency] (->Money amount currency))) ...more...
Ben Vandgrift says: We went through a few iterations of the money code. Must've missed that one. We'll get to it in the next printing. Thanks.
  • Reported in: P1.0 (29-Jul-17)
#81897
PDF page: 40
The section ‘Custom Printing for Types’ in chapter 2 oversimplifies the printing apparatus. Printing for the reader (prn etc.) versus printing for...more...
  • Reported in: P1.0 (20-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78837
PDF page: 48
Paper page: 31

#(conj %1 %2) is redundant, should just be `conj`

Same thing on the following page--Stuart Sierra

  • Reported in: P1.0 (17-Feb-16)
  • Fixed: 21-Apr-16, awaiting book release
#79930
PDF page: 50
The find-planet function is wrong in saying there is no useful initial value. In fact, nil is a very useful initial value, otherwise the first planet ...more...
  • Reported in: P1.0 (02-Feb-16)
  • Fixed: 21-Apr-16, awaiting book release
#79749
Paper page: 51
I think that on this phrase the word **are** is duplicated. > We’ve defined a planet? helper function that tests whether an entity is a Planet. In...more...
Ben Vandgrift says: Nice. Thanks.
  • Reported in: P1.0 (28-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#79064
PDF page: 51

doublicated "are"
"value are are referred"--Sergiy BONDARYEV

  • Reported in: P1.0 (30-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78868
Paper page: 53
In the first code example in the section 'Sorting and Duplicate Removal', we have done erroneous extra parens. (take 5 (sort (map (:name planets)))...more...
  • Reported in: P1.0 (08-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78804
PDF page: 55
#LineItem{:quantity 3, :catalog-item #CatalogItem{:number 664, :dept :clothing, ...more...
Ben Vandgrift says: Agreed.
  • Reported in: P1.0 (29-Jan-16)
  • Fixed: 21-Apr-16, awaiting book release
#79726
Paper page: 59

in (defn revenue-by-department ...), the function (reduce-kv ...) requires 3 arguments. The initial value {} is missing.--Alan Thompson

Ben Vandgrift says: Thanks!
  • Reported in: P1.0 (13-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#78991
PDF page: 69
In the last paragraph the sentence does not refer to the previous code example while sounding as if it makes a reference to the problem described by t...more...
  • Reported in: P1.0 (11-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78815
PDF page: 70
In the following code, (defn init "set up store with inventory" [items] (set-validator! inventory no-negative-values?) (swap! inventor...more...
  • Reported in: P1.0 (03-Jan-16)
  • Fixed: 21-Apr-16, awaiting book release
#79526
Paper page: 72
The function shop-for-item has the docstring in the wrong position, it's defined as (defn shop-for-item [cart item] "docstring" ) So the do...more...
Ben Vandgrift says: Thank you, you're quite correct.
  • Reported in: P1.0 (10-Apr-16)
  • Fixed: 21-Apr-16, awaiting book release
#80205
Paper page: 76
The first thing I noticed was that in the init function when shopping-list is created the keyword :butter is included, which is not in the store. This...more...
Ben Vandgrift says: ...right. Okay. Thank you, and we'll get this knocked out by the next printing.
  • Reported in: P1.0 (01-Mar-16)
  • Fixed: 21-Apr-16, awaiting book release
#80026
PDF page: 82
This sentence does not make sense to me: "You should be as follows along your application’s development path" Also the previous- and the next sente...more...
  • Reported in: P1.0 (04-Nov-15)
  • Fixed: 21-Apr-16, awaiting book release
#79106
PDF page: 102
"In core.async, we call these processes go blocks (in a nod to similar concepts in the Go language). Inside go blocks we use channels, though the put...more...
Ben Vandgrift says: That could be clearer. Thank you.
  • Reported in: P1.0 (13-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#78987
PDF page: 103
Paper page: 88

"Now we'll the fire..." should be "Now we'll fire the...".--Martin Harrigan

  • Reported in: P1.0 (07-Nov-15)
  • Fixed: 21-Apr-16, awaiting book release
#79124
Paper page: 119
The description of solo-mode in the second to last paragraph makes it sound like :mute and :pause affect the channels which *are* soloed. Setting sol...more...
Ben Vandgrift says: Excellent. We'll make this clear in the next printing.
  • Reported in: P1.0 (27-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78861
PDF page: 123
``` (go-loop [request (<! ch-in) response (fire-rules ke request)] (>! ch-out response) (when @active (recur)) ``` Won't this ...more...
  • Reported in: P1.0 (14-Apr-16)
  • Fixed: 21-Apr-16, awaiting book release
#80235
Paper page: 123
There is a code snippet on this page: (defn start-knowledge-engine [{:keys (ch-in ch-out rules active) :as ke}] (go-loop [request (<! ch-in) ...more...
  • Reported in: P1.0 (29-Jan-16)
  • Fixed: 21-Apr-16, awaiting book release
#79725
PDF page: 146

paragraph 3, line 5: "text execution" -> "test execution"--Alan Thompson

  • Reported in: P1.0 (27-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78862
PDF page: 153
"And finally, the shopping-list function takes a recipe and builds a shopping list, combining ingredients if necessary." There is no "shopping-list...more...
  • Reported in: P1.0 (04-Nov-15)
  • Fixed: 21-Apr-16, awaiting book release
#79107
PDF page: 154
The example of running quick-check to test the `identity-conversion-prop` is a duplicate of the example of the `conversion-order-prop` test. cljapp...more...
  • Reported in: P1.0 (27-Apr-16)
#80271
PDF page: 163
The code example (binding [*data-readers* {'my/card #'cards/card-reader}] (read-string "#my/card \"2c\"")) is presented as a way to dynamically...more...
  • Reported in: P1.0 (16-Oct-15)
  • Fixed: 21-Apr-16, awaiting book release
#79007
Paper page: 166
In the second paragraph the text says that the string generated does not include a time offset. In fact it does, 'Z' represents UTC (offset 00:00). -...more...
  • Reported in: P1.0 (09-Sep-15)
  • Fixed: 21-Apr-16, awaiting book release
#78806
PDF page: 228
p 228 epub version: superfluous use of "and" (​defn​ in-stock? ​"check if an item is in stock"​ [item] (​let​ [cnt (item @inventory)] ...more...
Ben Vandgrift says: Looks like we pruned something and left the and. Will fix in next printing. Thanks.