『Elixir実践ガイド』正誤表

2021/02/07

『Elixir実践ガイド』読者サポートページへ戻る

第1刷

第5章

5-2-7 「パイプ演算子(1)」

p.64 第2段落
誤 第2のパイプ演算子は左辺から2を受け取り
正 第2のパイプ演算子は左辺から4を受け取り
誤 第3のパイプ演算子は左辺から4を受け取り
正 第3のパイプ演算子は左辺から8を受け取り

第8章

8-3-4 「キーワードリスト形式による名前付き関数の定義」

p.121 第2段落
誤 マクロ呼び出しの後ろにdo/endブロック
正 マクロ呼び出しの第1引数の後ろにdo/endブロック

第9章

9-1-2 「パブリック関数とプライベート関数」のリスト9-3

修正前

6 + IO.inspect(MyMode.func(2))
7   IO.inspect(MyMode.func(1))

修正後

6 - IO.inspect(MyMode.func(1))
6 + IO.inspect(MyMode.func(2))

9-1-3 「プライベート関数はリモート呼び出しできない」のリスト9-4

修正前

6 - IO.inspect(MyMode.func(2))
6   IO.inspect(MyMode.func(1))

修正後

6 - IO.inspect(MyMode.func(2))
6 + IO.inspect(MyMode.func(1))

9-3-1 「他のモジュールの関数とマクロをモジュール名なしで呼ぶには」

リスト 9-16 の1行目 (p.135)
誤 IO.inspect(MyMod2.expt())
正 IO.inspect(MyMod2.experiment())
リスト 9-16 の行番号 (p.135)
誤 1, 2
正 14, 15
Column「スクリプト内でimportディレクティブを使用するときの注意事項」の第1段落

修正前

スクリプト内でモジュールを定義したとき、モジュール定義の外側でimportディレクティブによってそのモジュールの関数やマクロを取り込もうとすると例外CompileErrorが発生します。

修正後

スクリプト内でimportディレクティブを用いると指定したモジュールの関数やマクロをモジュール名なしで使えるようになります。しかし、スクリプト内であるモジュールを定義し、その後でそのモジュールをインポートしようとすると例外CompileErrorが発生します。

第10章

10-2 「ifマクロ」

この節全体で関数Integer.mod/2を用いているが、すでに第4章と第5章で使用した関数Kernel.rem/2を使うべきであった。両者の違いが説明されていないので読者は戸惑う。なお、関数Integer.mod/2は剰余演算(モジュロ演算)を行う関数である。2つの引数がどちらも0以上の値であれば、関数Kernel.rem/2と働きは同じである。

10-2-2 「ifマクロの誤った使い方」末尾のコラム (p.148-149)

誤 ターミナルで上記のコード実行すると
正 ターミナルで上記のコードを実行すると

10-2-5 「do/else/endブロックの正体」 (p.153)

誤 else と end に囲まれた式を :do オプションに
正 else と end に囲まれた式を :else オプションに

第12章

12-4-3 「リストから要素を削除する」 の図12-6 (p.184)

図中で点線で囲まれた「w」は「y」が正しい。

第15章

15-1-3 「ビットストリングを作る(2)」 (p.223)

誤 後半の2ビット(0, 1)を十進数に直すと0になりますので
正 後半の2ビット(0, 0)を十進数に直すと0になりますので

第17章

17-2-2 「with_index/2」 のリスト17-5の5行目 (p.276)

誤   |> Enum.map(fn {entry, i} -> #{i + 1}. #{entry}" end)
正   |> Enum.map(fn {entry, i} -> "#{i + 1}. #{entry}" end)

第24章

章全体

この章全体にわたって、各リストのファイルパスのディレクトリ名が誤っている。

例えば、リスト24-1のファイルパスの正誤は次の通り(P.386)。

誤 ex_book1/ch23/adder/lib/adder.ex
正 ex_book1/ch24/adder/lib/adder.ex

リスト24-2〜24-14の正誤も同様。

第25章

25-1-6 「キャプチャ演算子を使って書き直す」の最終段落(p.399)

誤 9-2-3 キャプチャ演算子を用いて無名関数を作る(2) 参照
正 9-2-4 キャプチャ演算子を利用する上での注意事項 参照

25-2-3 「メッセージを送る」のソースコード引用 (p.404)

誤 Process.send(Console, :process_command, [])
正 Process.send(__MODULE__, :process_command, [])

25-2-5 「コマンドを解析する」のリスト25-5の23行目 (p.407)

誤 _ -> IO.puts("UNKOWN COMMAND")
正 _ -> IO.puts("UNKNOWN COMMAND")

第26章

26-4-4 「格子のマスを指定するコマンドの解析」のP.425の本文の下から3行目

誤 プロンプトに対して「1 1」と入力し
正 プロンプトに対して「1 1」(数字の間にスペースが必要)と入力し

厳密には誤りではないが、印刷物上での「1 1」は「11」と誤解されやすい。

第28章

28-1-5 「Gridモジュールのテスト」のリスト28-4の45行目(p.455-456)

誤 describe "get_winner" do
正 describe "get_winner/1" do

付録

第9章の解答

問題2
誤 &(Enum.join([&1, &2, &3))
正 &Enum.join([&1, &2, &3])

「誤」の表記でも誤りではないが、9-2-3「キャプチャ演算子を用いて無名関数を作る(2)」の末尾にある注記で後者の方が標準的な書き方としたことと整合しない。

問題3 (欠落)
  1. fn x -> x end
  2. fn x, y -> x * y end
  3. fn x -> rem(x, 10) end
  4. fn x -> {x, x + 1} end

ペーパーバック版のみ。