この記事を読むのに必要な時間:およそ 0.5 分
お詫びと訂正(正誤表)
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
P.57 上から1行目
誤 |
Pythonの場合は、変数に対応する値の型によってイミュータブルかミュータブルかが決められており、=で結び付けたときの挙動は、値がイミュータブルかミュータブルかによって変わります。整数型の値はイミュータブルであり、イミュータブルな値については、=で結び付けたときの挙動はC言語と同じように考えることができます。 |
正 |
Pythonの場合は、変数に対応するオブジェクトの型によってイミュータブルかミュータブルかが決められており、=で結び付けたときの挙動は、オブジェクトがイミュータブルかミュータブルかによって変わります。整数型のオブジェクトはイミュータブルであり、イミュータブルなオブジェクトについては、=で結び付けたときの挙動は次のように確認することができます。 |
P.57 下から5行目
誤 |
xに1を加算してもyは影響を受けない |
正 |
y = xによって、変数xと変数yは同じIDのオブジェクトを指している |
P.57 下から4行目
誤 |
変数xと変数yは異なるIDのオブジェクトを指している |
正 |
x = x + 1によって、変数xのオブジェクトのIDは変化する。一方、変数yのオブジェクトのIDは変化しない |
P.57 下から3行目
誤 |
すなわち、xやyというラベルが貼られた値は異なるメモリ領域に確保されており、xに何らかの操作をしてもxというラベルが貼られたメモリ領域の値が変わるだけで、yというラベルが貼られたメモリ領域の値はなんら影響を受けません |
正 |
すなわち、x、yのラベルが貼られているイミュータブルなオブジェクトに対して、x = x + 1の操作をした場合、その計算結果を格納するオブジェクトが新規に作成され、その新しいオブジェクトのラベルがxになります。このとき、yというラベルが貼ら
オブジェクトはなんら影響を受けません |
P.57 脚注3
誤 |
イミュータブルな変数に対して何らかの演算を行うと、その演算結果を格納するための別のメモリ領域が確保され、そのメモリ領域に演算結果が書き込まれ、xというラベルは新たに確保されたメモリ領域の値に付け替えられます。そして、元のメモリ領域に置かれた値にはラベルが付与されていない状態になり、ガベージコレクションによって解放されます。 |
正 |
イミュータブルなオブジェクトは変更できないためです。 |
P.58 図3.8
中央の図の内容に誤りがありました。以下が正しい図です。
誤 |
 |
正 |
 |
P.58 図3.8キャプション
誤 |
Pythonにおける整数型の場合の変数とメモリ(オブジェクト)の関係 |
正 |
Pythonにおける整数型の場合の変数とオブジェクトの関係 |
P.59 上から2行目
誤 |
なぜこのようになってしまうかというと、y = xという操作が、yのために新しいメモリ領域を確保しているのではなく、xというラベルが指し示していた値にyというラベルを追加したことに対応しているからです。つまり、ラベルはxとyと異なっているものの、実体は同じものを指しているため、xに対して実行した操作がyに対しても実行されてしまっているわけです |
正 |
y = xによって、xとyが同じオブジェクトを参照するようになる点は、イミュータブルなオブジェクトの場合と同様です。しかし、xを通じてそのオブジェクトに変更を加えようとした場合、イミュータブルの場合とは異なり新しいオブジェクトは作成されず、既存のオブジェクト自体が変更されます。xとyは異なるラベルを持っていても、どちらも同じオブジェクトを参照しているため、xによる操作の結果がyにも影響しているように見えるのです |
P.59 図3.9キャプション
誤 |
Pythonにおけるリスト型の場合の変数とメモリ(オブジェクト)の関係 |
正 |
Pythonにおけるリスト型の場合の変数とオブジェクトの関係 |
P.59 図3.9
誤 |
 |
正 |
 |
P.183 図4.12 「カウンタ:3」部分
誤 |
child: Node |
正 |
child: None |
P.320 リスト8.7
最後の行に以下が必要でした。
正 |
print_sum_hello(10000000)
|
P.190 図4.13中のテキスト(2ヵ所)
P.191 図4.14中のテキスト(2ヵ所)
P.193 図4.15中のテキスト(2ヵ所)
P.190 図4.16中のテキスト(2ヵ所)
P.214 下から8行目
誤 |
また、EqおよびOrdは比較が必ずできる(失敗しない)型に対して、PartialEqおよびPartialOrdは比較ができない場合がある型に対して実装します。i32型などの整数型には、前者の"Partial"なしのトレイトが実装されているのに対し、f64、f32などの浮動小数点型には後者の"Partial" 付きのトレイトが実装されています。浮動小数点型の場合にはNaN(Not A Number)との比較ができないため、"Partial"付きになっています。 |
正 |
また、同じ型の同じ値同士の等値比較において、EqやOrdはいつでも真となることを前提にできる型に実装できるのに対し、PartialEqおよびPartialOrdはそれを前提にできる型に加え、できない型にも実装できます(数学的な言葉でいえば、PartialEqやPartialOrdは「その型に属する値が反射律を満たすことを要求されない型」に対して実装できるものです)。EqやOrdが実装される型には、自動的にPartialEqやPartialOrdも実装されています(EqやOrdがPartialEqやPartialOrdのサブトレイト(p216参照)であるため)。たとえば、浮動小数点型f32、f64はNaN(Not A Number)という値を含んでいますが、NaN == NaNの等値比較の結果は偽となるため、これらの型には"Partial"付きのトレイトのみが実装されています。一方、i32型などの整数型には、"Partial"なし、および"Partial"付きの両方のトレイトが実装されています。 |
P.192 下から4行目
誤 |
Rc::clone() |
正 |
Rc::new() |
P.23 3行目
誤 |
std::fmt::Displayいうトレイト |
正 |
std::fmt::Displayというトレイト |
P.71 3つ目のコード囲み10行目
P.142 リスト4.14のキャプション
誤 |
Result<T,E>} |
正 |
Result<T,E> |
余計な「}」がありました。
P.154 Pythonのコード 10行目
誤 |
print("The capital of {} is {}.".format(
|
正 |
print("The capital of {} is {}".format(
|
余計な「.」がありました。
P.154 Pythonのコード 14行目
誤 |
print(The capital of {} is not found.".format(tg))
|
正 |
print("The capital of {} is not found".format(tg))
|
「"」が抜けており,余計な「.」がありました。
P.151 本文5行目
誤 |
Some(“medium) を返却 |
正 |
Some(“large") を返却 |
P.154 Pythonのコード 11行目
P.171 リスト4.19 29行目
P.171 エラー画面 1行目
「e」が抜けていました。
P.174 エラー画面 2行目
P.180 リスト4.22 31行目
P.184 本文7行目
「の」が不要です。
P.213 本文14行目
誤 |
+演算子を使って表示 |
正 |
+演算子を使って表現 |
P.218 リスト5.11 32,41行目
P.17 端末画面
誤 |
$ cargp clippy # clippyを実行
|
正 |
$ cargo clippy # clippyを実行
|
P.154 Pythonのコード 2行目
誤 |
capticals["Japan"] = "Tokyo"
|
正 |
capitals["Japan"] = "Tokyo"
|
P.34 1行目
誤 |
クレート名(json_serde)に変えるだけです。 |
正 |
クレート名(serde_json)に変えるだけです。 |
P.171 リスト 4.19の10行目
誤 |
let number = Box::new(value + 10);
|
正 |
|
P.245 本文9行目
誤 |
実はこれは20行目と同じ意味になります。 |
正 |
実はこれは21行目と同じ意味になります。 |
P.289 3行目の漸化式
誤 |
 |
正 |
 |
最初のSの下付きは「N-1」ではなく「-1」であるべきでした。