実践F# 関数型プログラミング入門

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

お詫びと訂正(正誤表)

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

P.21 1.1.1

MPU4040
Intel 4004

P.32 1.5.3

関数型専用コンピュータの存在から理解できるように
関数型専用コンピュータが関数型言語の実行を最適化したように

P.33 1.6.1

「トランジスタの集積度は2年毎に倍増する」
「トランジスタの複雑度は2年毎に倍増する」

P.*93 4.11

関数を評価値に得ることを
新たな関数を評価値として得ることを

P.102 4.15

float関数
floor関数

P.103 4.15

dticket
ticket

P.106 リスト4-62

areaOfCircle << round
round << areaOfCircle

P.115 5.2

インライン展開とはコンパイル時のβ変換であり、β変換とは関数定義による式の置き換えです。つまり以下のような変換を言います
インライン展開とは、コンパイル時に、関数呼び出しをその定義によって置き換えることを言い、簡単に示すと以下のようになります

P.115 5.2

β変換は、通常、実行時の関数適用によって行われます。
このような式の展開は、通常、実行時の関数適用によって行われます。

P.157 囲み

// OCaml 互換
type 'a 'b 'c ... 型名 = ...

// .NET Framework互換
type 型名<'T, 'U, 'V...> = ...
// OCaml 互換
type ('a, 'b, 'c ...) 型名 = ...

// .NET Framework 互換
type 型名<'T, 'U, 'V ...> = ...

P.159 リスト5-86

=> 0
=> 4

P.173 5.26.1

try ... with式のtry節にtry ... finally式をネスト
try ... finally式のtry節にtry ... with式をネスト

P.177 表6-1

MySttuct
MyStruct

P.183 6.4.3

fot ... in式は
for ... in式は

P.185 6.6

参照は多相性を持ちます
参照セルは多相性を持ちます

P.192 6.10

極端な話、普段は参照透明に使えるのに、ある特定の時刻にのみ特殊な結果を算出して参照透明にならない、などという
極端な話、普段は参照透明であるかのように使えるのに、ある特定の時刻にのみ特殊な結果を算出して参照透明性を崩す動作をする、などという

P.193 図6.4

&X
&x

P.201 Column

stdinとはTextReaderであり、stdoutとstderrとはTextWriterのことです。
stdinはConsole.In、stdoutはConsole.Out、stderrはConsole.Errorのことです。

P.207 7.1.1

値制限になってしまう
値制限のエラーになってしまう

P.211 リスト7-8

-     Node(7, Node(3, Node(1, Empty, Empty),
-     Node(8, Node(3, Node(1, Empty, Empty),

P.211 リスト7-8

  Node
    (7,
     Node
  Node
    (8,
     Node

P.214 7.4.1

なお、insertとinsertSortはどちらも末尾再帰ではない
なお、リスト7-13で示したinsertとinsertionSortは、どちらも末尾再帰でない

P.218 リスト7-21

// 2 番目の要素を 3 番目に
// 2 番目の要素を 0 番目に

P.221 7.8.2

max、min、average
max、min、sum、average

P.226 リスト7-40

([1..3], [10..30])
([1..3], [10..10..30])

P.229 7.8.15

exsits、forall
exists、forall

P.240 リスト7-65

> Seq.isEmpty emp, Seq.isEmpty sgl;;
> Seq.empty |> Seq.isEmpty, Seq.singleton "F#" |> Seq.isEmpty;;

P.250 リスト7-88

printfn "%d" n
printf "%d " n

P.273 8.6.1

見立てを変えたことで、引数はタプルではありませんから、パイプラインには流せません
見立てを変えたことによって、名前付きの引数はもはやタプルではありませんから、パイプラインに流すことはできません

P.291 リスト8-64

SEACRET
SECRET

P.299 リスト8-75

> type Foo =
> type MyClass =

P.317 9.2.1

意味しており、複数の引数は丸括弧で囲んだタプルにします
意味しています

P.322 9.3

printfn関数の書式指定子である%Aに相当し
printfn関数の書式指定子である%Oに相当し

P.347 リスト10-21

Printfn "getCharge 6 =%A" (Charge.getCharge 20)
Printfn "getCharge 20 =%A" (Charge.getCharge 20)

P.359 10.2.1

Libraray1という名前空間を宣言してModule1というモジュール宣言を使用している
Library1という名前空間を宣言してModule1というモジュール宣言を使用している

P.361 10.2.1

コンストラクターをプライベートに定義したと考えられますが
コンストラクターをインターナルに定義したと考えられますが

P.362 図10-7

プライベートメンバーになる
インターナルメンバーになる

P.371 11.1.3

遅延実行という特徴を実現するために、リストや配列というデータ型があるにも関わらず、
リストや配列というデータ型があるにも関わらず、遅延実行という特徴を実現するために

P.372 図11-1

Seq.append (printfn "First = %A " n, Seq.singleton n)
Seq.append (printfn "First = %A " n; Seq.empty) (Seq.singleton n)

P.372 図11-1

Seq.append (printfn "Second = %A " n, Seq.singleton n)
Seq.append (printfn "Second = %A " n; Seq.empty) (Seq.singleton n)

P.372 図11-1

Seq.append (printfn "Third = %A " n, Seq.singleton n)
Seq.append (printfn "Third = %A " n; Seq.empty) (Seq.singleton n)

P.373 図11-2

Seq.append (printfn "First = %A " n, Seq.singleton n)
Seq.append (printfn "First = %A " n; Seq.empty) (Seq.singleton n)

P.373 図11-2

Seq.append (printfn "Second = %A " n, Seq.singleton n)
Seq.append (printfn "Second = %A " n; Seq.empty) (Seq.singleton n)

P.373 図11-2

Seq.append (printfn "Third = %A " n, Seq.singleton n)
Seq.append (printfn "Third = %A " n; Seq.empty) (Seq.singleton n)

P.380 リスト11-13

Delay (<fun:myExp@57-1>)
val myExp : (unit -> int)

> myExp();; // もしくは、ownBuilder.run myExp でも良い
Return (16)
実行 (<fun:Return@11>)
val it : int = 16
Delay (<fun:myExp@30>)
val myExp : (unit -> int)

> myExp ();;
Bind (10 , <fun:myExp@32-1>)
Return (16)
実行 (<fun:Return@18>)
val it : int = 16

P.381 11.1.4

「10, fun y -> ...」という式が「(fun y -> ...) 10」という式へと評価
ownBuilder.Bind(10, fun y -> ...)」という式が「(fun y -> ...) 10」という式へと評価

P.381 11.1.4

ビルダークラスを使って与えた式を順番に実行できる計算式という
与えられた式をビルダークラスを使って順番に実行できる計算式という

P.392 11.2.2

リスト11-18やリスト11-19は、キャンセル要求が通知された時に
リスト11-19やリスト11-20は、リスト11-18でキャンセル要求が通知された時に