history

青木日記 RSS

<前の日 | この月 | 次の日>

2006-04-02

『ふつうの Haskell プログラミング』

ようやく初校校了が見えてきたので、ふつけるの情報を出しておきます。 発売日はいまのとこ 5 月末で変わらず。

章目次 (数字の単位は KB、およそ 1KB == 1 ページ)

第一部: チュートリアル
 
 1.   27  intro ........... Haskell最初の一歩
 2.   27  tut1 ............ Haskellの基礎(1)関数とリスト
 3.   28  tut2 ............ Haskellの基礎(2)型と高階関数
 4.   17  tut3 ............ Haskellの基礎(3)演習
 
第二部: リファレンスみたいな
 
 5.   24  lazy ............ 遅延評価
 6.   26  value ........... 基本的な値
 7.   31  expr ............ 基本的な構文
 8.   24  function ........ 関数
 9.   29  type ............ 型と型クラス
10.   10  module .......... モジュール
11.   14  monad ........... モナド
 
第三部: 気持ちは実戦
 
12.   17  parsec .......... 実習(1)Wikiパーサ
13.   11  wiki ............ 実習(2)LazyLines
14.    2  after ........... 本書を読み終えたあとに
 
Total 280 Kbytes

分量は、ふつりなと同じ判型で 300 ページ強です。

第一部は Haskell 初心者ができるだけ馴染めることを優先しました。 第二部は本として使うのに便利であることを優先しました。 第三部は読んでおもしろいことを優先しました。

特徴。 5 章で置き換えモデルを使って遅延評価の実装について話したり、 8 章で point-free style について一節分えんえんと語ったり、 12 章でパーサコンビネータを容赦なく使ってたり (そのうえ作ったり) するところが特徴だろうなあ。

詳細目次

1 Haskell最初の一歩 intro.re                            507
   1 本書の概要                                             290
      1 対象環境                                                  4
      2 Haskellとは                                              21
      3 なぜHaskellか                                             8
      4 Haskellの利点(1)柔軟にプログラミングできる             45
      5 Haskellの利点(2)コンパイル時の型チェックが強力           20
      6 Haskellの利点(3)読みやすい                             36
      7 Haskellの利点(4)遅延評価が基本                         28
      8 Haskell 7つの壁                                          83
         1 「みんなHaskellは難しいって言ってる」
         2 「ドキュメントを読んだらいきなり参照透明性がどうとか……」
         3 「だって数学できないと使えないんでしょ?」
         4 「インストールで挫折した」
         5 「型エラーが大量に出て恐い」
         6 「型が難しい」
         7 「モナドがわからない」
      9 本書の構成                                               33
   2 Haskell処理系の準備                                     69
      1 GHC                                                       8
      2 Windowsでのインストール                                  26
      3 Linuxでのインストール                                    32
   3 Hello, World!                                          136
      1 hello.hs                                                 10
      2 ghcコマンド, runghcコマンド, ghciコマンド                 5
      3 Windowsでのコンパイル                                    19
      4 Linuxでのコンパイル                                      15
      5 runghcコマンドでHello, World!                            19
      6 ghciコマンドでHello, World!                              53
      7 コラム:Haskellのリファレンスマニュアル                  13
   4 本章のまとめ                                             5
 
2 Haskellの基礎(1)関数とリスト tut1.re                687
   1 チュートリアルの概要                                    25
   2 mainアクションと関数適用                                50
      1 hello.hs                                                  9
      2 変数の定義                                                2
      3 mainアクション                                            9
      4 関数の適用                                               13
      5 文字列リテラル                                            3
      6 hello.hsのまとめ                                         12
   3 入出力の基本                                           196
      1 catコマンド                                              41
      2 cat.hs                                                   32
      3 getContentsアクション                                     2
      4 putStr関数                                                3
      5 レイアウト                                               21
      6 do式                                                     15
      7 入出力と「<-」                                            9
      8 変数の参照                                                8
      9 cat.hsのまとめ                                           19
      10 catコマンドの謎                                         35
      11 cat.hsのまとめ                                           6
   4 リスト処理の基本(1)countlineコマンド                 187
      1 リスト                                                   21
      2 リストリテラル                                           40
      3 countlineコマンド                                        18
      4 countline.hs                                              9
      5 「$」演算子                                              33
      6 lines関数                                                15
      7 length関数                                               17
      8 print関数                                                 4
      9 countline.hsのまとめ                                     18
      10 コラム:変数名の慣習について                             8
   5 リスト処理の基本(2)headコマンド                      124
      1 headコマンド                                             22
      2 head.hs                                                  10
      3 2引数の関数適用                                          15
      4 関数の定義                                               12
      5 firstNLines関数の定義                                    16
      6 unlines関数                                              13
      7 take関数                                                 12
      8 head.hsのまとめ                                          22
   6 リスト処理の基本(3)tailコマンド                       77
      1 tailコマンド                                             19
      2 tail.hs                                                  17
      3 reverse関数                                               9
      4 tail.hsのまとめ                                          30
   7 本章のまとめ                                             9
   8 練習問題                                                14
      1 words関数                                                10
 
3 Haskellの基礎(2)型と高階関数 tut2.re                722
   1 型と値                                                 174
      1 静的型チェックと型推論                                   13
      2 基本的な型                                               28
      3 関数の型                                                 23
      4 型変数                                                   36
      5 複数の型変数                                             31
      6 型の宣言                                                 22
      7 これまでに紹介した関数の型                               18
   2 高階関数                                               244
      1 値としての関数                                           17
      2 高階関数とは                                             14
      3 map関数                                                  21
      4 expandコマンド                                           27
      5 expand.hsバージョン0                                     18
      6 if式                                                     23
      7 「==」演算子                                             15
      8 expand.hsバージョン0のまとめ                             29
      9 expand.hsバージョン1                                     19
      10 concat関数                                              24
      11 expand.hsバージョン1のまとめ                            35
   3 パターンマッチ(1)                                    132
      1 expand.hsバージョン2                                     21
      2 パターンマッチ                                           43
      3 concatMap関数                                            28
      4 replicate関数                                            15
      5 expand.hsバージョン2のまとめ                             23
   4 パターンマッチ(2)                                    152
      1 map関数                                                   9
      2 リストに対するパターンマッチ                             33
      3 関数の再帰定義                                           24
      4 map関数の定義のまとめ                                    19
      5 map関数の適用                                            58
      6 コラム:再帰と高階関数                                    6
   5 本章のまとめ                                            13
   6 練習問題                                                 2
 
4 Haskellの基礎(3)演習 tut3.re                        453
   1 コマンドライン引数の処理とモジュール                    98
      1 echoコマンド                                              9
      2 echo.hs                                                  13
      3 モジュールとimport宣言                                   19
      4 Mainモジュール                                            8
      5 Preludeモジュール                                         9
      6 unwords関数                                              14
      7 System.getArgsアクション                                 11
      8 echo.hsのまとめ                                          14
   2 演習                                                   295
      1 fgrepコマンド                                            12
      2 fgrep.hs                                                 25
      3 mainアクションとfgrep関数の定義                          25
      4 head関数                                                 19
      5 tail関数                                                 21
      6 filter関数                                               15
      7 fgrep関数とwhere節                                       28
      8 match関数の実装                                          58
      9 any関数                                                  17
      10 List.tails関数                                          16
      11 List.isPrefixOf関数                                     18
      12 fgrep.hsのまとめ                                        27
      13 コラム:もっと簡潔に書きたい                            11
   3 本章のまとめ                                            26
   4 練習問題                                                29
      1 List.sort関数                                            11
      2 List.group関数                                           14
 
5 遅延評価 lazy.re                                      594
   1 遅延評価とは                                           276
      1 評価とは                                                 10
      2 置き換えモデル                                           36
      3 最内簡約と最外簡約                                       28
      4 グラフ簡約                                               41
      5 ifを関数として書く                                       28
      6 データ構造の遅延評価                                     44
      7 遅延評価の限界                                           22
      8 遅延評価とパターンマッチ                                 22
      9 コラム:置き換えモデルと参照透明性                       43
   2 遅延評価のシミュレーション                             179
      1 myIf関数の評価                                           45
      2 map関数の評価                                           119
      3 map関数の評価に関する補足                                13
   3 遅延評価の利点と欠点                                   130
      1 遅延評価の利点                                            5
      2 利点(1)計算量を削減できる                              46
      3 利点(2)無限の長さのリストが扱える                      28
      4 利点(3)インターフェイスを統一できる                    24
      5 遅延評価の欠点                                            5
      6 欠点(1)思った順番で操作を実行するのが難しい             7
      7 欠点(2)デバッグしにくい                                13
   4 本章のまとめ                                             5
 
6 基本的な値 value.re                                   734
   1 本章の構成                                               9
   2 真偽値                                                  26
      1 Bool型                                                    5
      2 not関数                                                   6
      3 (&&)関数                                                  7
      4 (||)関数                                                  7
   3 数値                                                   119
      1 整数型                                                   38
      2 浮動小数点数型                                           19
      3 数値の演算                                               55
      4 これ以外の数値型                                          6
   4 文字と文字列                                            96
      1 文字型                                                   36
      2 文字列型                                                  7
      3 文字に関する関数                                          4
      4 文字種のテスト                                           19
      5 大文字・小文字の変換                                     15
      6 文字と整数との変換                                       14
   5 タプル                                                  87
      1 タプルとは                                               18
      2 ユニットとは                                              5
      3 タプルを扱う関数                                          3
      4 fst関数                                                  13
      5 snd関数                                                  13
      6 zip関数                                                  22
      7 unzip関数                                                12
   6 リスト                                                 178
      1 リストとは                                               27
      2 「:」演算子                                              27
      3 リストの数列表記                                         36
      4 リストに関する関数                                        8
      5 null関数                                                 18
      6 (++)関数                                                 18
      7 リスト内包表記                                           43
   7 実習:cat -nコマンド                                   194
      1 cat -nコマンド                                           19
      2 catn.hs                                                  22
      3 numbering関数の実装                                      23
      4 zipLineNumber関数の実装                                  25
      5 format関数の実装                                         26
      6 show関数                                                  9
      7 rjust関数の実装                                          40
      8 catn.hsのまとめ                                          28
   8 本章のまとめ                                             6
   9 練習問題                                                14
 
7 基本的な構文 expr.re                                  823
   1 コメント                                                72
      1 1行コメント                                              19
      2 ブロック形式のコメント                                   17
      3 Literate形式                                             35
   2 レイアウト                                             122
      1 ブレース構文                                             34
      2 レイアウト                                               30
      3 コードブロックのネスト                                   44
      4 式の継続                                                 12
   3 if式                                                    29
      1 if式の文法                                                7
      2 if式のコーディングスタイル                               21
   4 パターンマッチ                                         228
      1 パターンマッチとは                                       29
      2 さまざまなパターン                                       10
      3 変数パターン                                              9
      4 「_」パターン                                            11
      5 リテラルパターン                                         12
      6 タプルパターン                                           19
      7 リストパターン                                           25
      8 データコンストラクタによるパターン                       16
      9 遅延パターン                                             15
      10 「@」パターン                                           18
      11 ガード                                                  45
      12 パターンマッチとガード                                  18
   5 case 式                                                 48
      1 case式とは                                               33
      2 case式とレイアウト                                       14
   6 関数定義                                               176
      1 関数の定義                                               21
      2 識別子の規則                                             18
      3 二項演算子の定義                                         14
      4 二項演算子の規則                                         21
      5 前置形式と二項演算子の変換                               18
      6 演算子の優先順位と結合性                                 43
      7 Haskellでの演算子優先順位と結合性                        20
      8 演算子優先順位と結合性の宣言                             20
   7 定義と束縛                                             117
      1 let式                                                    25
      2 where節                                                  27
      3 let式とwhere節の違い                                     19
      4 変数のシャドウイング                                     22
      5 定義中での相互参照                                       11
      6 パターン束縛                                             12
   8 本章のまとめ                                             5
   9 練習問題                                                21
      1 splitAt関数                                              18
 
8 関数 function.re                                      631
   1 値としての関数                                          91
      1 関数束縛                                                 18
      2 高階関数                                                  9
      3 無名関数                                                 29
      4 無名関数と高階関数                                       15
      5 無名関数でのパターンマッチ                               19
   2 関数合成                                               102
      1 関数合成とは                                             22
      2 (.)関数                                                  24
      3 関数合成の使用例                                         55
   3 部分適用                                               185
      1 部分適用とは                                             54
      2 Haskellでの関数と適用                                    30
      3 セクション                                               32
      4 セクションと(-)関数                                       8
      5 部分適用の応用(1)高階関数と部分適用                    22
      6 部分適用の応用(2)変数の削減                            38
   4 Point-Free Style                                       216
      1 Point-Free Styleとは                                     30
      2 Point-Free head.hs                                       47
      3 Point-Free fgrep.hs(1)                                 53
      4 Point-Free fgrep.hs(2)                                 76
      5 Point-Free Styleとコードの読みやすさ                      8
   5 本章のまとめ                                             6
   6 練習問題                                                23
      1 dropWhile関数                                            14
 
9 型と型クラス type.re                                  630
   1 静的型チェックと型推論                                  97
      1 型                                                        9
      2 静的な型チェック                                          6
      3 型推論                                                   29
      4 型宣言                                                   20
      5 式に対する型宣言                                         10
      6 多相型                                                   22
   2 代数的データ型                                         279
      1 代数的データ型とdata宣言                                 11
      2 構造体スタイル                                           36
      3 パターンマッチによるフィールドへのアクセス               18
      4 フィールドラベル                                         27
      5 フィールドアクセサ                                       10
      6 フィールドの更新                                         15
      7 多相的な型の宣言                                         20
      8 型コンストラクタとデータコンストラクタ                   16
      9 列挙型スタイル                                           34
      10 共用体スタイル                                          39
      11 再帰的な型                                              39
      12 一般のdata宣言                                          13
   3 型の別名と付け替え                                      48
      1 type宣言                                                 21
      2 newtype宣言                                              25
   4 型クラス                                               195
      1 型クラスとは                                             15
      2 型クラスの例                                             25
      3 クラスメソッド                                            7
      4 多重定義                                                 14
      5 型クラスの継承                                           22
      6 class宣言                                                28
      7 継承を含むclass宣言                                      15
      8 instance宣言                                             15
      9 deriving宣言                                             21
      10 主要な型クラス                                          14
      11 コラム:型クラスとオブジェクト指向のクラス              18
   5 本章のまとめ                                             6
   6 練習問題                                                 1
 
10 モジュール module.re                                 214
   1 モジュールの基本概念                                    47
      1 モジュールとは                                            9
      2 基本的なモジュール                                       28
      3 階層化ライブラリ                                          9
   2 モジュールの定義とエクスポート                          90
      1 module宣言                                               12
      2 エクスポートするエンティティの限定                       20
      3 データコンストラクタのエクスポート                       35
      4 モジュールのエクスポート                                 14
      5 Mainモジュール                                            8
   3 インポート                                              70
      1 import宣言                                               13
      2 特定エンティティのインポート                             14
      3 特定エンティティのインポート防止                         11
      4 qualified構文                                            18
      5 as構文                                                   12
   4 本章のまとめ                                             3
 
11 モナド monad.re                                      368
   1 モナドとは何か                                          49
      1 モナド                                                   21
      2 Monadクラス                                              13
      3 モナド則                                                 14
   2 Maybeモナド                                             76
      1 Maybeとは                                                31
      2 Maybeをモナドとして使う                                  20
      3 Maybeモナドの仕組み                                      24
   3 リストモナド                                            36
      1 リストモナドの目的                                       28
      2 リストモナドの実例                                        0
      3 リストモナドの仕組み                                      7
   4 モナドの構文                                            94
      1 do式                                                     11
      2 do式とlet                                                29
      3 let節                                                    26
      4 do式とif                                                 27
   5 IOモナド                                               102
      1 IOモナドの目的                                           17
      2 IOでの(>>=)                                              32
      3 IOでの(>>)                                               13
      4 入出力以外でのIOモナド                                   16
      5 IOモナドの問題                                           11
      6 Debug.Trace.trace関数                                    12
   6 それで結局モナドって何?                                 3
   7 本章のまとめ                                             2
   8 練習問題                                                 2
 
12 実習(1)Wikiパーサ parsec.re                        526
   1 第3部の目的                                             40
      1 Wikiとは                                                 17
      2 Wikiの構造                                                1
      3 なぜWikiを作るのか                                       22
   2 Wikiパーサ                                              19
      1 Wiki記法                                                  2
      2 LazyLinesのWiki記法                                       8
      3 実装の概要                                                8
   3 インラインパーサ                                        43
      1 パーサコンビネータとは                                    4
      2 Text.ParserCombinators.Parsecモジュール                   1
      3 パーサコンビネータの仕組み                                0
      4 インラインパーサ                                         36
   4 パラメタライズされた文字列                              66
      1 HTML                                                     28
      2 ParameterizedText                                         1
      3 ParameterizedTextの実装                                  37
   5 ブロックレベルパーサ                                    66
      1 ベタ書き版compile関数                                    42
      2 パーサコンビネータ版compile関数                          22
   6 行指向パーサの作成                                     118
      1 data Parser                                              23
      2 パーサコンビネータの仕組み                                8
      3 選択演算子の実装                                         11
      4 satisfy関数                                              10
      5 eof関数                                                  19
      6 many関数                                                 12
      7 many1関数                                                 8
      8 LineParser                                               25
      9 モナドの利点                                              2
   7 ブロックのコンパイル                                   170
      1 パース開始                                               19
      2 キャプション                                              6
      3 定義リスト                                               12
      4 段落                                                     10
      5 List.intersperse関数                                     23
      6 プリフォーマットリスト                                   52
      7 リスト                                                   48
   8 本章のまとめ                                             0
 
13 実習(2)LazyLines wiki.re                           296
   1 設計の概要                                              74
      1 本章の目標                                                6
      2 まず最初に決めること                                      5
      3 コラム:LazyLinesという名前の由来                         6
      4 ポリシー                                                  7
      5 Haskellでのウェブアプリケーション開発                    21
      6 設計                                                      4
      7 モデル:データベース                                      9
      8 ビュー:テンプレート                                      2
      9 ビュー:パーサ                                            1
      10 コントローラ:リクエストの処理                           6
      11 ファイル構成                                             7
   2 データベースの実装                                      75
      1 Databaseモジュール                                        7
      2 Database型                                               15
      3 データベースの簡単な操作                                 15
      4 ファイルの書き込み                                       38
   3 リクエスト-レスポンス                                    0
   4 Wikiのリクエスト-レスポンス                            109
   5 HTMLテンプレート                                         1
      1 仕様                                                      1
   6 PathUtils.hs                                            34
      1 init関数                                                 18
      2 last関数                                                 16
   7 この章のまとめ                                           0
 
14 本書を読み終えたあとに after.re                       34
   1 Haskellの開発体制                                        3
   2 アプリケーション                                         1
   3 ライブラリ                                               2
   4 開発ツール                                              11
   5 書籍                                                     9
   6 ウェブ上の情報                                           2
   7 本章のまとめ                                             1

(17:06)

Perlish Magazine

http://jp.rubyist.net/PerlMa/

うは。無駄に凝りすぎのディテールが最高。 ここまできっちりできてるとフツーに役立つなあ。 結城さんインタビューも (まだ読んでないけど) おもしろそうだ。

(17:07)

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|