内容紹介
Common Lispでアプリケーションを開発するために必要な知識を基礎から解説
Common Lispは、近年再注目されている関数型プログラミング言語Lispのもっともメジャーな一種で、ANSIにより仕様が策定されている。本書は、Common Lispで実用的なアプリケーションを開発するために必要な知識を基礎からていねいに解説するもの。
このような方におすすめ
・ソフトウェア開発者
・学生
目次
主要目次
第1章 序論:なぜLispなのか?
第2章 お気の済むまで:REPLツアー
第3章 実践:簡単なデータベース
第4章 シンタックスとセマンティクス
第5章 関数
第6章 変数
第7章 マクロ:標準的な制御構文の構築
第8章 マクロ:自分で定義しよう
第9章 実践:ユニットテストフレームワーク
第10章 数字、文字、そして文字列
第11章 コレクション
第12章 リスト処理:やつらがLISPと呼ぶ理由
第13章 リストを越えて:コンスセルの別用途
第14章 ファイルとファイルI/O
第15章 実践:パスネーム可搬ライブラリ
第16章 オブジェクト指向再入門:総称関数
第17章 オブジェクト指向再入門:クラス
第18章 FORMATの手習い
第19章 例外処理を越えて:コンディションと再起動
第20章 特殊オペレータ
第21章 大規模なプログラミング:パッケージとシンボル
第22章 黒帯のためのLOOP
第23章 実践:スパムフィルタ
第24章 実践:バイナリファイルのパース
第25章 実践:ID3パーサ
第26章 実践:AllegroServeでWebプログラミング
第27章 実践:MP3データベース
第28章 実践:Shoutcastサーバ
第29章 実践:MP3ブラウザ
第30章 実践:HTML生成ライブラリ ― インタプリタ版
第31章 実践:HTML生成ライブラリ ― コンパイラ版
第32章 結論:さて次は?
付録A 日本語処理
付録B 訳語一覧
詳細目次
第1章 序論:なぜLispなのか?
1.1 なぜLispなのか?
1.2 はじまりの場所
1.3 誰のための本か?
第2章 お気の済むまで:REPLツアー
2.1 Lisp処理系を選ぶ
2.2 Lisp in a Boxで始めよう
2.3 心を解き放て:対話的プログラミング
2.4 REPLを試す
2.5 Lisp 流の“Hello, World”
2.6 作業を保存する
第3章 実践:簡単なデータベース
3.1 CDとレコード
3.2 CDのファイリング
3.3 データベースの中身を見てみる
3.4 ユーザインタラクションを改善する
3.5 データベースの保存と読み出し
3.6 データベースにクエリを投げる
3.7 既存のレコードを更新する――― もう1つのWHEREの使い道
3.8 ムダを排除して勝利を収める
3.9 まとめ
第4章 シンタックスとセマンティクス
4.1 何でこんなに括弧があるの?
4.2 ブラックボックスをばらして中を見てみると
4.3 S式
4.4 LispフォームとしてのS式
4.5 関数呼び出し
4.6 特殊オペレータ
4.7 マクロ
4.8 真、偽、そして等しさ
4.9 Lispコードの書式付け
第5章 関数
5.1 新しい関数の定義
5.2 関数のパラメータリスト
5.3 オプショナルパラメータ
5.4 レストパラメータ
5.5 キーワードパラメータ
5.6 異なる種類のパラメータの併用
5.7 関数の戻り値
5.8 データとしての関数または高階関数
5.9 無名関数
第6章 変数
6.1 変数の基礎
6.2 レキシカル変数とクロージャ
6.3 ダイナミック変数。またの名をスペシャル変数
6.4 定数
6.5 代入
6.6 一般化代入
6.7 場所の値を変更する別のやり方
第7章 マクロ:標準的な制御構文の構築
7.1 WHENとUNLESS
7.2 COND
7.3 ANDとORとNOT
7.4 繰り返し
7.5 DOLISTとDOTIMES
7.6 DO
7.7 強力なLOOP
第8章 マクロ:自分で定義しよう
8.1 マックはじめて物語
8.2 マクロ展開時vs.実行時
8.3 DEFMACRO
8.4 試しにマクロを書いてみる:do-primes
8.5 マクロのパラメータ
8.6 展開形の生成
8.7 漏れをふさぐ
8.8 マクロを書くマクロ
8.9 シンプルなマクロの先へ
第9章 実践:ユニットテストフレームワーク
9.1 最初の試みを2件
9.2 リファクタリング
9.3 戻り値を手直しする
9.4 より良い結果レポートのために
9.5 抽象化の余地
9.6 テストの階層
9.7 まとめ
第10章 数、文字、そして文字列
10.1 数
10.2 数値リテラル
10.3 基本的な数学
10.4 数値比較
10.5 高度な数学
10.6 文字
10.7 文字比較
10.8 文字列
10.9 文字列比較
第11章 コレクション
11.1 ベクタ
11.2 特殊ベクタ
11.3 シーケンスとしてのベクタ
11.4 シーケンス反復関数
11.5 さまざまな高階関数
11.6 シーケンス全体の操作
11.7 ソートとマージ
11.8 部分シーケンス操作
11.9 シーケンス述語
11.10 シーケンスマッピング関数
11.11 ハッシュテーブル
11.12 ハッシュテーブル上の反復
第12章 リスト処理:やつらがLISPと呼ぶ理由
12.1 「リストなんてない」
12.2 関数プログラミングとリスト
12.3 「破壊的」な操作
12.4 リサイクルな関数と構造共有の組み合わせ
12.5 リスト操作関数
12.6 マッピング
12.7 その他のデータ構造
第13章 リストを越えて:コンスセルの別用途
13.1 木
13.2 集合
13.3 ルックアップテーブル:連想リストと属性リスト
13.4 DESTRUCTURING-BIND
第14章 ファイルとファイルI/O
14.1 ファイルの読み込み
14.2 バイナリデータの読み込み
14.3 まとめ読み
14.4 ファイル出力
14.5 ファイルを閉じる
14.6 ファイル名
14.7 パスネームでどうやってファイル名を表現するか
14.8 新しいパスネームの構築
14.9 ディレクトリ名の2つの表現方法
14.10 ファイルシステムとのやり取り
14.11 その他のI/O
第15章 実践:パスネーム可搬ライブラリ
15.1 API
15.2 *FEATURES*と読み込み時条件分岐
15.3 ディレクトリの内容の列挙
15.4 ファイルの存在をテストする
15.5 ディレクトリツリーの巡回
第16章 オブジェクト指向再入門:総称関数
16.1 総称関数とクラス
16.2 総称関数とメソッド
16.3 DEFGENERIC
16.4 DEFMETHOD
16.5 メソッド結合
16.6 標準メソッド結合
16.7 その他のメソッド結合
16.8 多重メソッド
16.9 次章へつづく……
第17章 オブジェクト指向再入門:クラス
17.1 DEFCLASS
17.2 スロット指定子
17.3 オブジェクトの初期化
17.4 アクセサ関数
17.5 WITH-SLOTSとWITH-ACCESSORS
17.6 スロットをクラスに割り当てる(共有スロット)
17.7 スロットと継承
17.8 多重継承
17.9 良きオブジェクト指向設計
第18章 FORMATの手習い
18.1 そもそもFORMAT関数とは
18.2 FORMAT関数の指示子
18.3 基本フォーマット
18.4 文字指示子と整数指示子
18.5 浮動小数点数の指示子
18.6 英語の指示子
18.7 条件による整形
18.8 反復
18.9 ホップ、スキップ、ジャンプ
18.10 さらに……
第19章 例外処理を越えて:コンディションと再起動
19.1 Lispのやり方
19.2 コンディション
19.3 コンディションハンドラ
19.4 再起動
19.5 複数の再起動を提供する
19.6 コンディションの別な使い道
第20章 特殊オペレータ
20.1 評価を制御する
20.2 レキシカル環境を操作する
20.3 ローカルなフローの制御
20.4 スタックの巻き戻し
20.5 多値
20.6 EVAL-WHEN
20.7 その他の特殊オペレータ
第21章 大規模開発に向けて:パッケージとシンボル
21.1 読取器はパッケージをどうやって使うか
21.2 パッケージとシンボルの用語をいくつか
21.3 3つの標準パッケージ
21.4 自分でパッケージを定義する
21.5 再利用可能なライブラリのパッケージ化
21.6 個別の名前をインポートする
21.7 パッケージ化の定石
21.8 パッケージの悩みどころ
第22章 黒帯のためのLOOP
22.1 LOOPのパーツ
22.2 反復の制御
22.3 数えるループ
22.4 コレクションやパッケージについてループする
22.5 =とthenによる反復
22.6 ローカル変数
22.7 変数を分配する
22.8 値の累積
22.9 無条件実行
22.10 条件実行
22.11 セットアップと後始末
22.12 終了条件のテスト
22.13 まとめ
第23章 実践:スパムフィルタ
23.1 スパムフィルタの心臓部
23.2 フィルタに学習させる
23.3 単語ごとの統計
23.4 確率を合成する
23.5 逆カイ二乗関数
23.6 フィルタをさらに学習させる
23.7 フィルタをテストする
23.8 ユーティリティ関数
23.9 結果の分析
23.10 お次は?
第24章 実践:バイナリファイルのパース
24.1 バイナリファイル
24.2 バイナリフォーマットの基礎
24.3 バイナリファイル内の文字列
24.4 複合構造
24.5 マクロを設計する
24.6 夢を現実に
24.7 バイナリオブジェクトを読む
24.8 バイナリオブジェクトを書く
24.9 継承の追加
24.10 継承したスロットを追跡する
24.11 タグ付きの構造
24.12 プリミティブなバイナリ型
24.13 現在のオブジェクトスタック
第25章 実践:ID3パーサ
25.1 ID3v2タグの構造
25.2 パッケージを定義する
25.3 整数型
25.4 文字列型
25.5 ID3タグヘッダ
25.6 ID3フレーム
25.7 タグのパディングの検出
25.8 ID3の複数のバージョンに対応させる
25.9 バージョン対応のフレーム基底クラス
25.10 バージョン対応のフレーム具象クラス
25.11 実際に必要なフレームは?
25.12 テキスト情報のフレーム
25.13 コメントのフレーム
25.14 ID3タグから情報を抽出する
第26章 実践:AllegroServeでWebプログラミング
26.1 30 秒で分かるサーバサイドWebプログラミング
26.2 AllegroServe
26.3 AllegroServe で動的なコンテンツを生成する
26.4 HTMLを生成する
26.5 HTMLのマクロ
26.6 クエリパラメータ
26.7 クッキー
26.8 小さなアプリケーションフレームワーク
26.9 フレームワークの実装
第27章 実践:MP3データベース
27.1 データベース
27.2 スキーマを定義する
27.3 値を挿入する
27.4 データベースにクエリを出す
27.5 マッチングの関数
27.6 結果を取得する
27.7 それ以外のデータベース操作
第28章 実践:Shoutcastサーバ
28.1 Shoutcastプロトコル
28.2 曲ソース
28.3 Shoutcastを実装する
第29章 実践:MP3ブラウザ
29.1 プレイリスト
29.2 曲ソースとしてのプレイリスト
29.3 プレイリストを操作する
29.4 クエリパラメータの型
29.5 HTMLのひな形
29.6 閲覧ページ
29.7 プレイリストページ
29.8 プレイリストを探す
29.9 アプリケーションを動かす
第30章 実践:HTML生成ライブラリ――― インタプリタ版
30.1 特定用途向け言語の設計
30.2 FOO言語
30.3 文字のエスケープ
30.4 インデントプリンタ
30.5 HTMLプロセッサインタフェース
30.6 プリティプリンタのバックエンド
30.7 基本的な評価のルール
30.8 次は何?
第31章 実践:HTML生成ライブラリ――― コンパイラ版
31.1 コンパイラ
31.2 FOOの特殊オペレータ
31.3 FOOのマクロ
31.4 公開API
31.5 終わりに
第32章 結論:さて次は?
32.1 Lispライブラリを探すには
32.2 他の言語へのインタフェース
32.3 とりあえず動くから正しく、速くへ
32.4 アプリケーションの配布
32.5 次のステージ
付録A 日本語処理
A.1 external-format
A.2 文字
A.3 文字列とバイト列
A.4 エンコーディング変換可搬ライブラリの作成
A.5 まとめ
付録B 訳語一覧
索引
続きを見る