書籍をつつく90−ふつうのHaskellプログラミング。Haskellプログラミングの入門書。2009-03-09 Mon 11:41
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が気になった人は是非読んで見て♪見て♪ |
この記事のコメント |
コメントの投稿 |
||
|
|
||
| 管理者だけに閲覧 | ||
|
|
||
この記事のトラックバック |
|
| 無差別に技術をついばむ鳥 |
|