無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

書籍をつつく90−ふつうのHaskellプログラミング。Haskellプログラミングの入門書。

Haskell本第二弾行くピヨッ!
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門


【目次】
第1章 Haskellプログラミングを始めよう
本書の概要
 Haskellとは
 なぜHaskellか
 Haskellの利点(1)柔軟にプログラミングできる
 Haskellの利点(2)コンパイル時の型チェックが強力
 Haskellの利点(3)読みやすい
 Haskellの利点(4)遅延評価が基本
 Haskell 7つの壁
Haskell処理系の準備
 GHC
 Windowsでのインストール
 Linuxでのインストール
Hello, World!
 hello.hs
 ghcコマンド、runghcコマンド、ghciコマンド
 Windowsでのコンパイル
 Linuxでのコンパイル
 runghcコマンドでHello, World!
 ghciコマンドでHello, World!
 [column] Haskellのリファレンスマニュアル
本章のまとめ

第2章 Haskellの基礎(1)関数とリスト
チュートリアルの概要
mainアクションと関数適用
 hello.hs
 変数の定義
 mainアクション
 関数の適用
 文字列リテラル
 hello.hsのまとめ
入出力の基本
 catコマンド
 cat.hs
 getContentsアクション
 putStr関数
 レイアウト
 do式
 入出力と「<-」
 変数の参照
 cat.hsのまとめ
 catコマンドの謎
 この節のまとめ
リスト処理の基本(1)countlineコマンド
 リスト
 リストリテラル
 countlineコマンド
 countline.hs
 「$」演算子
 lines関数
 length関数
 print関数
 countline.hsのまとめ
 [column] 変数名の慣習について
リスト処理の基本(2)headコマンド
 headコマンド
 head.hs
 2引数の関数適用
 関数の定義
 firstNLines関数の定義
 unlines関数
 take関数
 head.hsのまとめ
リスト処理の基本(3)tailコマンド
 tailコマンド
 tail.hs
 reverse関数
 tail.hsのまとめ
本章のまとめ
練習問題
 words関数

第3章 Haskellの基礎(2)型と高階関数
型と値
 静的型チェックと型推論
 基本的な型
 関数の型
 型変数
 複数の型変数
 型の宣言
 これまでに紹介した関数の型
高階関数
 値としての関数
 高階関数とは
 map関数
 expandコマンド
 expand.hsバージョン0
 if式
 「==」演算子
 [column] 同一性と同値性
 expand.hsバージョン0のまとめ
 expand.hsバージョン1
 concat関数
 expand.hsバージョン1のまとめ
パターンマッチ(1)
 expand.hsバージョン2
 パターンマッチ
 concatMap関数
 replicate関数
 expand.hsバージョン2のまとめ
パターンマッチ(2)
 map関数
 リストに対するパターンマッチ
 関数の再帰定義
 map関数の定義のまとめ
 map関数の適用
 [column] 再帰と高階関数
本章のまとめ
練習問題

第4章 Haskellの基礎(3)演習
コマンドライン引数の処理とモジュール
 echoコマンド
 echo.hs
 モジュールとimport宣言
 Mainモジュール
 Preludeモジュール
 unwords関数
 System.getArgsアクション
 echo.hsのまとめ
演習
 fgrepコマンド
 fgrep.hs
 mainアクションとfgrep関数の定義
 head関数
 tail関数
 filter関数
 fgrep関数とwhere節
 match関数の実装
 any関数
 List.tails関数
 List.isPrefixOf関数
 fgrep.hsのまとめ
 [column] もっと簡潔に書きたい
本章のまとめ
練習問題
 List.sort関数
 List.group関数

第5章 遅延評価
遅延評価とは
 評価とは
 置き換えモデル
 最内簡約と最外簡約
 グラフ簡約
 ifを関数として書く
 データ構造の遅延評価
 遅延評価の限界
 遅延評価とパターンマッチ
 [column] 参照透明性
遅延評価のシミュレーション
 myIf関数の評価
 map関数の評価
 map関数の評価に関する補足
遅延評価の利点と欠点
 遅延評価の利点
 利点(1)不要な計算を減らせる
 利点(2)無限の長さのリストが扱える
 利点(3)インターフェイスを統一できる
 遅延評価の欠点
 欠点(1)思った順番で操作を実行するのが難しい
 欠点(2)デバッグしにくい
本章のまとめ

第6章 基本的な値
本章の構成
真偽値
 Bool型
 not関数
 (&&)関数
 (||)関数
数値
 整数型
 浮動小数点数型
 数値の演算
 これ以外の数値型
文字と文字列
 文字型
 文字列型
 文字に関する関数
 文字種のテスト
 大文字・小文字の変換
 文字と整数との変換
タプル
 タプルとは
 ユニットとは
 タプルを扱う関数
 fst関数
 snd関数
 zip関数
 unzip関数
リスト
 リストとは
 「:」演算子
 リストの数列表記
 リストに関する関数
 null関数
 (++)関数
 リスト内包表記
実習:cat -nコマンド
 cat -nコマンド
 catn.hs
 numbering関数の実装
 zipLineNumber関数の実装
 format関数の実装
 show関数
 rjust関数の実装
 catn.hsのまとめ
本章のまとめ
練習問題

第7章 基本的な構文
コメント
 1行コメント
 ブロック形式のコメント
 リテレイト形式
レイアウト
 ブレース構文
 レイアウト
 コードブロックのネスト
 式の継続
if式
 if式の文法
 if式のコーディングスタイル
パターンマッチ
 パターンマッチとは
 さまざまなパターン
 変数パターン
 「_」パターン
 リテラルパターン
 タプルパターン
 リストパターン
 データコンストラクタによるパターン
 「@」パターン
 ガード
 パターンマッチとガード
case 式
 case式とは
 case式とレイアウト
関数定義
 関数の定義
 識別子の規則
 二項演算子の定義
 二項演算子の規則
 前置形式と二項演算子の変換
 演算子の優先順位と結合性
 Haskellでの演算子優先順位と結合性
 演算子優先順位と結合性の宣言
定義と束縛
 let式
 where節
 let式とwhere節の違い
 変数のシャドウイング
 定義中での相互参照
 パターン束縛
本章のまとめ
練習問題
 splitAt関数

第8章 関数
値としての関数
 関数束縛
 高階関数
 無名関数
 無名関数と高階関数
 無名関数でのパターンマッチ
関数合成
 関数合成とは
 (.)関数
 関数合成の使用例
部分適用
 部分適用とは
 Haskellでの関数と適用
 セクション
 セクションと(-)関数
 部分適用の応用(1)──高階関数と部分適用
 部分適用の応用(2)──変数の削減
ポイントフリースタイル
 ポイントフリースタイルとは
 ポイントフリーなhead.hs
 ポイントフリーなfgrep.hs(1)
 ポイントフリーなfgrep.hs(2)
 ポイントフリースタイルとコードの読みやすさ
本章のまとめ
練習問題
 dropWhile関数

第9章 型と型クラス
静的型チェックと型推論
 型
 静的な型チェック
 型推論
 型宣言
 式に対する型宣言
 多相型
代数的データ型
 代数的データ型とdata宣言
 構造体スタイル
 パターンマッチによるフィールドへのアクセス
 フィールドラベル
 セレクタ
 フィールドの更新
 多相的な型の宣言
 型コンストラクタとデータコンストラクタ
 列挙型スタイル
 共用体スタイル
 再帰的な型
 一般のdata宣言
 代数的データ型の使用例
型の別名と付け替え
 type宣言
 newtype宣言
型クラス
 型クラスとは
 型クラスの例
 クラスメソッド
 多重定義
 型クラスの継承
 class宣言
 継承を含むclass宣言
 instance宣言
 deriving宣言
 主要な型クラス
 [column] 他言語の概念との比較
本章のまとめ
練習問題
 List.sortBy関数

第10章 モジュール
モジュールの基本概念
 モジュールとは
 基本的なモジュール
 階層化ライブラリ
モジュールの定義とエクスポート
 module宣言
 エクスポートするエンティティの限定
 データコンストラクタのエクスポート
 モジュールのエクスポート
 Mainモジュール
インポート
 import宣言
 特定エンティティのインポート
 特定エンティティのインポート防止
 qualified構文
 as構文
 [column] Preludeモジュールの関数を隠す
本章のまとめ

第11章 モナド
モナドとは何か
 モナド
 Monadクラス
 モナド則
Maybeモナド
 Maybeとは
 Maybeモナドの目的
 Maybeモナドの実例
 Maybeモナドの仕組み
 returnクラスメソッドの使い道
 [column] Monadクラスのインスタンスは型じゃない
リストモナド
 リストモナドの目的
 リストモナドの実例
 リストモナドの仕組み
IOモナド
 IOモナドの目的
 IOモナドと(>>=)
 IOモナドと(>>)
 入出力以外でのIOモナド
モナドの構文
 do式
 let節
 do式とif
本章のまとめ
練習問題

第12章 Wikiエンジンの開発
第3部の目的
 Wikiとは
 Wikiを使ってみる
 なぜWikiを作るのか
 インストール
プログラムの概要
 HTTPとCGI
 一番最初に決めること
 ポリシー
 仕様
 設計
 ファイル構成
 LazyLinesのコンパイル
CGIの処理
 mainアクション
 Context型
コントローラの実装
 概要
 appMain関数
 WikiRequest型
 wikiRequest関数
 wikiSession関数
 respondTo関数
 viewPageResponse関数
モデルの実装
 概要
 データベースの構造
 ページ名とファイルパスの対応
 ページの読み込み
 ページの保存
ビューの実装
 概要
 fill関数(LazyLines.hs)
 fillTemplate関数
 fill関数(Template.hs)
 expand関数
本章のまとめ

第13章 Wiki記法パーサの開発
本章の概要
 LazyLinesのWiki記法
 ブロック要素とインライン要素
 実装の概要
HTMLの処理
 ハイパーリンクのパラメータ化
 HTML型を扱う関数
 HTML型から文字列への変換
 HTMLのエスケープ
インライン要素のパーサ
 Parsecライブラリとは
 Parsecを使ったインライン要素パーサ
 パーサの起動
 textパーサ
 意味値
 WikiNameのパース
 URL自動リンクのパース
ブロック要素のパーサ
 Parsecによるブロック要素パーサ
 documentパーサ
 ブロック要素パーサの起動
 見出し
 箇条書き
 段落
 List.intersperse関数
パーサコンビネータライブラリの実装
 パーサ型の宣言
 パーサの起動
 入力1つをパースするパーサの実装
 firstChar関数の実装
 パーサの並びの実装
 (<|>)関数の実装
 many関数の実装
 many1関数の実装
 Parsecとの違い
本章のまとめ

第14章 本書を読み終えたあとに
Haskell言語
 Haskell言語について
 Haskellで書かれたアプリケーション
Haskellを使ったプログラム開発
 ライブラリ
 開発ツール
 リファレンスマニュアル
ドキュメント
 ウェブサイト
 書籍

付録
 A.1 コマンドライン入出力
 A.2 練習問題の解答例
 A.3 参考文献


この本は、前の記事で紹介した本よりも本格的なプロとしての入門書ピヨ♪プロとしてのという点に注意してね♪この本を読みこなすには、ある程度の知識が必要なんだ。だけど、その知識は決して高い水準じゃないから安心してね。
この本の特徴は何と言っても古きよきUNIX系のプログラミング学習法を取り入れている点ピヨ。それはどういうことかというと、UNIXコマンドの実装を通じてHaskellを学ぶというスタイルの事だよ。最近の書籍では馴染みがない方法だけど、UNIX系プログラミングの本では何度か見かけたピヨ。この方式はプログラミングの学習法としてかなり有効だとボクは思う。だからこの本をボクは自信を持って紹介するピヨ♪Haskellが気になった人は是非読んで見て♪見て♪
別窓 | 書籍レビュー | コメント:0 | トラックバック:0 | ∧top | under∨
<<書籍をつつく91ープログラミング言語StandardML入門。稀有なる本。 | 無差別に技術をついばむ鳥 | 書籍をつつく89−入門Haskell―はじめて学ぶ関数型言語。あっさり風味を楽しもう♪>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |