Jaa


実践F# 関数型プログラミング入門の正誤表の補足

技術評論社さんで「実践F# 関数型プログラミング入門」の正誤表がやっと公開されました。正誤表の公開が遅れまして、本当に申し訳ございませんでした。本当なら、9月には公開されないといけなかったのですが、諸般の事情で遅れてしまいました。公開されて正誤表には掲載できなかった箇所がございますので、以下に追加を掲載させていただきます。分量が多いのですが、ご容赦ください。また、諸般の事情から公開が遅れまして、本当に申し訳ございませんでした。

P14

筆者が考える本書の読み方は、1章から読み進めることも、あるいは興味のある章から読んで、必要に応じて他の章を読むというものです。
本書の読み方ですが、1章から順に読み進めてもよいし、興味のある章を読みながら、必要に応じて他の章を読むのもよいでしょう。

P17

参照透過性(参照透明性とも呼ばれます)
参照透明性(参照透過性とも呼ばれます)

P19  1

アルゴリズム実装には関数型プログラミングに影響を受けて
アルゴリズムは関数型プログラミングに影響を受けて

P20  1.1

プログラムング言語
プログラミング言語

P27  図1-4

高級水準言語
高級言語

P27  1.4.1

適材適所で言語が存在するのかということです。
適材適所で言語が存在するのでしょうか。

P28  1.4.2

「解くべき問題」ということです。
「解くべき問題」です。

P28  1.4.2

解き方をモデル化したのがプログラミング言語であるということです。
解き方をモデル化したのがプログラミング言語です

P29  Column

「Abstract Art」
「Abstract art」

P30  1.5.1

メタ言語として開発された。
メタ言語として開発されたものである。

P30  1.5.1

ラムダ計算で証明できるというものです。
ラムダ計算を使って証明できるというものです。

P32  1.5.3

「不遇の関数型言語」と呼んでいます。
筆者は「不遇の関数型言語」と呼んでいます。

P33  1.6.1

回路以外に流れることで他のトランジスタ回路へ影響を及ぼす
回路以外に流れることでトランジスタ回路の動作に影響を及ぼす

P36  1.7.1

しかしながら、Webの世界では
我々が利用しているWebの世界では

P39  1.7.4

不変性(英語でImmutable)という特徴があります。不変性とは、変数に値を代入すると(関数型言語の世界では、代入ではなく束縛と呼びます)値を変更できなくる性質のことです。
不変(英語でImmutable)な変数という特徴があります。不変な変数とは、変数に値を代入すると(関数型言語の世界では、代入ではなく束縛と呼びます)値を変更できないものです。

P54  表2-7

(1行でも複数行)
(1行でも複数行でも可

P81  4.4

bool型に係る演算
bool型に関わる演算

P115  リスト5-1

 x |> f=> f x
  y |> g => (|>) y g // 演算子の関数化 
  => (fun x f -> f x) y g // インライン展開 
  => let x = y in let f = g in f x // インライン展開 
  => g y // 極めて単純なインライン関数でのみ行われる特殊な変換 

P116  表5-1

±1.5×10-45 ~ ±3.4×1038(7桁)
±1.5×10 -45 ~ ±3.4×1038(7桁)

P116  表5-1

±5.0×10-324 ~ ±1.7×10308(15~16桁)
±5.0×10 -324 ~ ±1.7×10308(15~16桁)

P116  表5-1

±1.0×10-28 ~ ±7.9×1028(28~29桁)
±1.0×10 -28 ~ ±7.9×1028(28~29桁)

P129  リスト5-29

 > printfn "%6.2d" 123.45;;12345val it : unit = ()> printfn "%+6d" 123; printfn "%+6d" -123;;  +123  -123
   > printfn "%+6d" 123; printfn "%+6d" -123;; +123 -123 

P139  リスト5-47

when句によるガートと網羅性
when句によるガードと網羅性

P141  5.14

全体を全体を{ ... }
全体を{ ... }

P168  5.25.1

failewithで例外を発生させる
failwithで例外を発生させる

P176  図6-1

 let func n =    let f n = seq { 1..n }              | > Seq.filter (fun n ->                    n%3=0 || n%5=0)    n | > f | > Seq.sum
 let func n =    let f n = seq { 1..n }               |>  Seq.filter (fun n ->                    n%3=0 || n%5=0)    n  |>  f  |>  Seq.sum

P176  図6-2

 let func n =    let f n = seq { 1..n }              | > Seq.filter (fun n ->                    n%3=0 || n%5=0)    n | > f | > Seq.sum
 let func n =    let f n = seq { 1..n }               |>  Seq.filter (fun n ->                    n%3=0 || n%5=0)    n  |>  f  |>  Seq.sum

P181  6.4

ちなみにF#には、いわゆるbreakやcontinueなど、ループ内で使用する専用の制御文はありません。
脚注と重複した内容のため本文から削除させていただきます

P188  6.7

「(unit -> int)」
(unit -> int)

P193  6.11

束縛に束縛されます
束縛されます

P202  6.17.1

Recourceful.txt
Resourceful.txt

P210  図7-2

7と8のノードの配置について
7と8のノードを入れ替えます

P212  7.3

Queu<'T>クラス
Queue<'T>クラス

P213  7.4

insertSort
挿入ソートは英語でinsertion sortであり、関数名をinsertSortでなくinsertionSortとするのがより適切です。

P240  リスト7-65

 Seq.empty;;
  >  Seq.empty;;

P254  7.19.1

union、diffrence、intersect(集合演算)
union、difference、intersect(集合演算)

P273  8.6.2

オプショナル引数(optional argument)と呼ぶ
オプショナル引数(optional argument)と言う

P284  8.10

リスト8-47のような
リスト8-48のような

P302  8.19

型拡張には、内在的拡張(intrinsic extension)と任意的拡張(optional extension)の2種類があり
本書で参照させていただいた「F#ドキュメント翻訳向上委員会」の最新のご提案では、intrinsic extensionの訳語は固有拡張、optional extensionの訳語は任意拡張となっています。

P306  8.20

単行演算子
演算子

P311  9

.NET Frameworkのライブラリ使い方を何度も前章までで説明してきました。
.NET Frameworkのライブラリを前章までで何度も使用してきました。

P311  9

Framewrokのライブラリは、アセンブリ(物理的な実行ファイルのことで、拡張子がDLLかEXEになります)
Frameworkのライブラリは、アセンブリ(物理的な実行ファイルのことで、拡張子がDLLかEXEになります)

P315  9.2.1

リスト9-1に示した
リスト9-3に示した

P317  Column

リスト9-1とリスト9-2に示した
リスト9-3とリスト9-4に示したに示した

P322  9.3

丸括弧を付けるのが当たり前と説明しまし。
丸括弧を付けるのが当たり前と説明しました。

P323  Column

機能の1として含まれています。
機能の1つとして含まれています。

P333  10

公開する仕様を宣言宣言するものです。
公開する仕様を宣言するものです。

P344  10.1.3

「モジュール宣言が必要」が必要
モジュール宣言」が必要

P346  表10-2

暗黙的にモジュール名をファイル名として使用できる
暗黙的にファイル名をモジュール名として使用できる

P362  図10-7

実装コードとシグネチャの説明文について
実装コードとシグネチャの説明文を入れ替えます

P372  表11-3の補助説明

pati
pati

P384  11.2.1

提供しますから、非同期プログラミングモデルを説明する前に同期プログラミングを振り返ってみましょう。
提供しますが、 非同期プログラミングモデルを説明する前に同期プログラミングを見直してみましょう。

P387  11.2.1

.NET Frameworkが提供する非同期プログラミングとは、「BeginとEndという名前で始まるメソッド」を組み合わせることで(Begin/End パターン)実現しますから、複数の非同期プログラミングを組み合わせた場合を考えてみましょう。
.NET Frameworkが提供する非同期プログラミングは、「BeginとEndという名前で始まるメソッド」を組み合わせることで(Begin/End パターン)実現します。では、 複数の非同期プログラミングを組み合わせた場合を考えてみましょう。

P395  11.2.3

表11-9に示したWebClient.AsyncDownloadString
11-10に示したWebClient.AsyncDownloadString

P406  11.3

エージェントと呼ばれるます
エージェントと呼ばれます

P420  図11-10

OL
0L

P420  図11-11

OL
0L

P429  12.2

表12-3に示したquery関数
12-4に示したquery関数

P452  表C-1

Val
Var

P459  索引

counBy
countBy