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 6 months 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
N/A
#76470: In a future edition of the book, it would be good to have a chapter dedicated to testing and the different test frameworks available. In parti...more...
P1.0
03-Mar-14
xviii

#52246: In the acknowledgements for the second edition, there is a comma missing between the names of Kurt Landrus and Kenneth Lundin.--Kim Shrier

B6.0
27-Jul-13
14

#52250: code sample has halt() without the dot at the end

B6.0
28-Jul-13
15
#52368: "The code for a process is contained in a module and to create a process we call the primitive spawn(...) which actually creates the process."...more...
B6.0
11-Aug-13
44
#52304: I think the explanation of where to use the comma should be mentioned before showing the example where it is used (in the test function), othe...more...
B6.0
02-Aug-13
52

#76363: Funs: You may want to add a description of funs with names here.

F = fun Fact(0) -> 1; Fact(N) -> N * Fact(N-1) end.--Edward McDowell

P1.0
04-Feb-14
66
#53326: is_bitstring/1 is missing from Table 1, which purports to list all legal guard predicates. Current Erlang documentation has is_bitstring/1 and...more...
P1.0
08-Dec-13
68
#53078: The very last sentence of section 4.7 refers to "the following tables list all the guard predicates...and all the guard functions", but these ...more...
P1.0
25-Oct-13
68

#52349: “Or course, if they want an exception..." => "Of course, ..."--YeJun Su

B6.0
09-Aug-13
70
#53066: In the second paragraph, "This is a consequence of the way that the list was constructed. If we want the list elements in the same order as th...more...
B6.0
23-Oct-13
76

#58776: In chapter 5.2 rr() function suggested as shell command for record definition, but rd() should be used in last versions of Erlang.--Mikhail Aksenov

P1.0
30-Dec-13
79

#52256: what's up with count_characters/3?
I'm guessing
count_characters(T, #{ H => 1 }, X));
should be
count_characters(T, X#{ H => 1 });

B6.0
28-Jul-13
79
#76580: The third in the list of map properties states that a key can be any //fully ground// term. However, as of 17rc1, no variables can be used in ...more...
P1.0
30-Mar-14
81

#76361: Pattern Matching the fields of a map: In R17rc1 you must use := (not =>) in map patterns. --Edward McDowell

P1.0
04-Feb-14
82
#76582: Because variables can't be used in map keys in 17rc1 or rc2 (see errata for p. 79), count_characters/2 is triply broken. The head of its first...more...
P1.0
30-Mar-14
82

#53137: ASCII decimal value 101 is 'e', and 104 is 'h'. The book states that 101 is 'h'. --Robert Brown

P1.0
11-Nov-13
83

#76362: BIFs that Operate on Maps: In R17rc1 maps:map_size is named maps:size and maps:difference is missing.--Edward McDowell

P1.0
04-Feb-14
84

#76587: The JSON bridge stuff doesn't seem to have made it into R17 after all, which means this whole section is off (for now).--Cian Synnott

P1.0
30-Mar-14
93 80
#76335: When updating a map is first introduced, the following example is used: 5> F3 = F1#{ c => xx }. #{ a => xx, b => 2 , c => xx} The respo...more...
P1.0
26-Jan-14
110
#76561: In 7.1 Binaries Section,the code snippet 1> <<5,10,20>>. <<5,10,20>> 2> <<"hello">>. <<"hello">> 3> <<65,66,67>> <<"ABC">> The third ...more...
P1.0
23-Mar-14
111
#76347: In the "Bit-Level Storage" section, the sentence with "they have to masked out and shifted into registers" should be "they have to be masked o...more...
P1.0
29-Jan-14
115

#58794: "This specifies the endianess of the machine. "

I think "endianess" might be "endianness".--Keiji Yoshida

P1.0
04-Jan-14
116
#52364: In example on page 116 there is "{version, "4.8"}" and on page 117 among the text there is "The value {version,"4.5.5"} is the version of the ...more...
B6.0
11-Aug-13
138

#52365: At bottom of the page:
-spec plan_route(From:: point(), To:: point()) -> ...
should be
-spec plan_route(From::point(), To::point()) -> ...--Kamil Kieliszczyk

B6.0
11-Aug-13
147

#76330: Page 147 bottom half: "creates an opaque types called rich_text()". It should be "type" not "types".

P1.0
25-Jan-14
160
#52366: While running script 'hello' which contains main(Args) interpreter produces a warning: ./hello_escript.erl:3: Warning: variable 'Args' is un...more...
B6.0
11-Aug-13
164

#52487: "see the online tutorial[4] for more details"
[4] ...parser_tutorial-1.0.tgz - dead link
--Iurii Beznos

B6.0
28-Aug-13
197
#76380: I looked through it and noticed that loop is taking an argument X that it does nothing with and the spawn in start do not send any arguments w...more...
P1.0
06-Feb-14
206
#76609: In 13.7 ([Concurrent] Error Handling Primitives), spawn_monitor/1 and /3 are shown returning {Pid, Ref}. The book states that "Pid is the proc...more...
P1.0
04-Apr-14
206
#76611: Tiny wart in 13.7: -spec spawn_link(Mod, Fnc, Args) -> Pid but -spec spawn_monitor(Mod, Func, Args) -> Pid The second parameter to...more...
P1.0
04-Apr-14
206
#52624: In the end of the page, this code: 4> Pid ! hello. hello 5> =ERROR REPORT==== 14-May-2013::10:05:42 === Error in process <0.36.0> with...more...
B6.0
12-Sep-13
208
#76612: Error #52624 (reported by Riccardo Marotti on B6.0 book page 206) is still alive in P1.0 on PDF page 208. The output of the handler functio...more...
P1.0
04-Apr-14
209

#53024: "If the process dies before on_exit gets evaluated, then a link will be not be created."
--Alex Yermolaev

P1.0
12-Oct-13
223 215
#76606: The node name is specified as 'gandalf' (-sname gandalf) which is then correctly displayed in the terminal output. However, in the second last...more...
P1.0
03-Apr-14
268
#58779: lib_misc:string2value(Str) is referenced in the nano_server example, but it is not defined. Later, the author defines string2value/2 which req...more...
P1.0
31-Dec-13
280
#52367: In wait_for_ref/2 function closing end of case statement has semicolon. Erlang compiler reports errors: udp_test.erl:62: syntax error befor...more...
B6.0
11-Aug-13
297
#52382: Some parts of codes showed in chapter 18 are out-dated with code stored on Github, for example at page 297 at the beginning of listing of webs...more...
B6.0
13-Aug-13
306
#52259: In section 19.1, under "Insert a tuple or several tuples into a table" and "Look up a tuple in a table", it stated that insert(Tablename, X) a...more...
B6.0
29-Jul-13
310
#52575: From jaerlang2-code.tgz, 354984si.ngl.gz is broken. gunzip -t 354984si.ngl.gz gzip: 354984si.ngl.gz: invalid compressed data--crc error ...more...
B6.0
04-Sep-13
311

#52481: Among the text there is "for_each_trigram_in_the_english_language(F, A)" shouldn't it be "for_each_trigram_in_the_english_language/2" ?
--Kamil Kieliszczyk

B6.0
27-Aug-13
378
#53138: The link erlang.org/doc/pdf/design_principles.pdf is broken. I assume it's similar to erlang.org/doc/design_principles/des_princ.html, except ...more...
P1.0
12-Nov-13
421

#52479: At the top of page:
"In lines 12 to 13 (..)"
should be:
"In lines 14 to 15 (..)"
--Kamil Kieliszczyk

B6.0
27-Aug-13
425

#52480: In listing of adapter_db1_tester.erl there should be store/3 imported from adapter_db1, not store/2--Kamil Kieliszczyk

B6.0
27-Aug-13