実用Common Lisp(Peter Norvig 杉本 宣男)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. 実用Common Lisp

実用Common Lisp


翻訳

形式:
書籍
発売日:
ISBN:
9784798118901
定価:
10,120(本体9,200円+税10%)
仕様:
B5変・928ページ
キーワード:
#プログラミング,#開発環境,#開発手法,#Web・アプリ開発
シリーズ:
IT Architects' Archive
紙の書籍

良質なプログラムへ到達する王道

本書が扱っているトピックは、人口知能(AI)、コンピュータプログラミング技術、プログラミング言語Common Lispの3つです。丁寧に読めばAIに対する多くの疑問が解けると同時に、重要なAIの技法も理解できるようになります。また、Common Lispのプログラムを読み、修正し、作成する能力の向上も期待できます。

プログラム例は、良質のプログラミングスタイルで書かれているもので、実例はAIの研究で使用されるパラダイムを使っています。本書を読破することによって3つの良質なプログラミングを習得できる貴重な1冊です。

【原題】Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp

推薦の言葉
まえがき
なぜLisp なのか? なぜCommon Lisp なのか?
各章の概要
この本の使い方
補助的教科書と参考書
演習についての注意
謝辞

第1部 Common Lisp 入門

第1章 Lisp 入門
1.1 記号計算
1.2 変数
1.3 特殊形式
1.4 リスト
1.5 新しい関数の定義
1.6 関数の使用
1.7 高階関数
1.8 その他のデータ型
1.9 要約:Lisp 評価規則
1.10 Lisp は何が違うのか?
1.11 演習
1.12 解答

第2章 簡単なLisp プログラム
2.1 英語のサブセット用文法
2.2 成功法による解法
2.3 ルールベースによる解法
2.4 進むべき2つの道
2.5 プログラムの変更を伴わない文法の変更
2.6 同じデータを使用した複数のプログラム開発
2.7 演習
2.8 解答

第3章 Lisp 概要
3.1 Lisp スタイルガイド
3.2 特殊形式
3.3 リストを扱う関数
3.4 等値性と内部表現
3.5 シーケンスを扱う関数
3.6 表を管理するための関数
3.7 木構造を扱う関数
3.8 数を扱う関数
3.9 集合を扱う関数
3.10 破壊的な関数
3.11 データ型の概要
3.12 入力/出力
3.13 デバックツール
3.14 バグ予防ツール
3.15 評価
3.16 クロージャ
3.17 スペシャル変数
3.18 多値
3.19 パラメータに関する補足
3.20 その他
3.21 演習
3.22 解答

第2部 初期のAIプログラム

第4章 GPS:一般問題解決機
4.1 局面1:問題記述
4.2 局面2:仕様記述
4.3 局面3:実装
4.4 局面4:テスト
4.5 局面5:分析、もしくは「GPSの一般性について嘘をついていた」
4.6 「ブロックの周りを走り回る」問題
4.7 「シブリング目標を打ち消す」問題
4.8 「調べることなく跳躍する」問題
4.9 「再帰的な副目標」問題
4.10 「中間情報の不足」問題
4.11 GPSバージョン2:もう少し一般性のある一般問題解決機
4.12 モンキーとバナナ(新しい領域の問題)
4.13 迷路探索
4.14 積み木の世界
4.15 局面5(再び):バージョン2の分析
4.16 「跳躍もしなければ調べもしない」問題
4.17 「記述力不足」問題
4.18 「完全な情報」問題
4.19 「相互作用する目標」問題
4.20 GPSの限界
4.21 歴史と参考資料
4.22 演習
4.23 解答

第5章 ELIZA:機械との対話
5.1 ELIZAの問題記述と仕様記述
5.2 パターンマッチング
5.3 セグメントパターンマッチング
5.4 ELIZAのプログラム:ルールベーストランスレータ
5.5 歴史と参考資料
5.6 演習
5.7 解答

第6章 ソフトウェアツールの構築
6.1 対話的インタープリタツール
6.2 パターンマッチングツール
6.3 ルールベーストランスレータツール
6.4 探索ツール一式
6.5 探索問題としてのGPS
6.6 歴史と参考資料
6.7 演習
6.8 解答

第7章 STUDENT:代数の文章題を解く
7.1 英文を方程式に変換する
7.2 代数方程式を解く
7.3 例題
7.4 歴史と参考資料
7.5 演習
7.6 解答

第8章 記号計算:簡単化プログラム 
8.1 中置記法を前置記法に変換する
8.2 簡単化ルール
8.3 結合性と可換性
8.4 対数関数、三角関数、微分
8.5 ルールベースの限界
8.6 積分
8.7 歴史と参考資料
8.8 演習

第3部 ツールと技法

第9章 効率性の問題
9.1 キャッシュ技法:メモ化(Memoization)
9.2 コンパイル技法
9.3 遅延計算技法
9.4 索引付け技法
9.5 インスツルメンテーション:最適化すべきものを決定する
9.6 効率に関するケーススタディ:SIMPLIFY プログラム
9.7 歴史と参考資料
9.8 演習
9.9 解答

第10章 低レベルの効率性の問題
10.1 宣言の使用
10.2 総称関数の回避
10.3 複雑な引数リストの回避
10.4 不必要なcons の回避
10.5 適切なデータ構造の使用
10.6 演習
10.7 解答

第11章 論理プログラミング
11.1 アイディア1:一様なデータベース
11.2 アイディア2:論理変数のユニフィケーション
11.3 アイディア3:自動後戻り制御
11.4 ゼブラ問題
11.5 後戻りとユニフィケーションの相乗効果
11.6 破壊的ユニフィケーション
11.7 Prolog によるProlog
11.8 Prolog とLisp の比較
11.9 歴史と参考資料
11.10 演習
11.11 解答

第12章 論理プログラムのコンパイル
12.1 Prologコンパイラ
12.2 コンパイラのエラー修復
12.3 コンパイラの改良
12.4 ユニフィケーションのコンパイルの改良
12.5 ユニフィケーションのさらなる改良
12.6 コンパイラのユーザインタフェース
12.7 コンパイラのベンチマークテスト
12.8 プリミティブの追加
12.9 カット
12.10 「実際の」Prolog
12.11 歴史と参考資料
12.12 演習
12.13 解答

第13章 オブジェクト指向プログラミング
13.1 オブジェクト指向プログラミング
13.2 オブジェクト
13.3 総称関数
13.4 クラス
13.5 委譲
13.6 継承
13.7 CLOS:Common Lisp Object System
13.8 CLOS による実装例:探索ツール
13.9 CLOS はオブジェクト指向システムか?
13.10 オブジェクト指向プログラミングの利点
13.11 歴史と参考資料
13.12 演習

第14章 知識表現と推論
14.1 知識表現言語の分類
14.2 述語論理とその問題
14.3 論理型言語:Prolog
14.4 Prolog の表現力に関する問題
14.5 述語論理の表現力に関する問題
14.6 完全性に関する問題
14.7 効率に関する問題:索引付け
14.8 索引付け問題の解決法
14.9 安全性の問題の解決法
14.10 表現力の問題の解決法
14.11 歴史と参考資料
14.12 演習
14.13 解答

第4部 高度なAIプログラム

第15章 標準形による記号計算
15.1 多項式のための標準形
15.2 多項式の微分
15.3 中置形式と前置形式間の変換
15.4 多項式簡単化プログラムのベンチマークテスト
15.5 有理式のための標準形
15.6 有理式の拡張
15.7 歴史と参考資料
15.8 演習
15.9 解答

第16章 エキスパートシステム
16.1 不確実性への対応
16.2 導出された事実のキャッシュ
16.3 質問
16.4 変数の代わりをするコンテキスト
16.5 後ろ向き連鎖再考
16.6 専門家との対話
16.7 クライアントとの対話
16.8 医療診断エキスパートシステムMYCIN
16.9 確信度に代わるもの
16.10 歴史と参考資料
16.11 演習
16.12 解答

第17章 制約充足による線画のラベル付け
17.1 線画ラベル付け問題
17.2 制約と探索の組み合わせ
17.3 線画のラベル付け
17.4 線画のエラー検査
17.5 歴史と参考資料
17.6 演習

第18章 探索とオセロゲーム
18.1 ゲームのルール
18.2 表現に関する選択
18.3 局面の評価
18.4 先読み探索:ミニマックス探索
18.5 賢い探索:アルファ・ベータ探索
18.6 ゲームの分析
18.7 競技版オセロ
18.8 一連のゲームによる戦略の評価
18.9 効率の良い探索
18.10 プレサイクル(Precycle)
18.11 キラー手
18.12 選手権試合のプログラム:Iago とBill
18.13 その他の技法
18.14 歴史と参考資料
18.15 演習
18.16 解答

第19章 自然言語入門
19.1 句構造文法によるパース
19.2 文法の拡張とあいまいさの認識
19.3 効率の良いパース
19.4 未知の単語
19.5 意味表現へ踏み込んだパース
19.6 選好を使用するパース
19.7 文脈自由な句構造規則の問題点
19.8 歴史と参考資料
19.9 演習
19.10 解答

第20章 ユニフィケーション文法
20.1 推論としてのパース
20.2 確定節文法
20.3 DCG形式の単純な文法
20.4 限定作用素(Quantifier)を持つDCG 文法
20.5 限定作用素の有効範囲に関するあいまいさの保持
20.6 長距離依存性
20.7 DCG 規則の拡張
20.8 歴史と参考資料
20.9 演習
20.10 解答

第21章 英語の文法
21.1 名詞句
21.2 修飾語
21.3 名詞修飾語
21.4 限定詞
21.5 動詞句
21.6 副詞
21.7 節
21.8 文
21.9 XP
21.10 単語
21.11 辞書(Lexicon)
21.12 辞書の支援
21.13 その他のプリミティブ
21.14 例題
21.15 歴史と参考資料
21.16 演習

第5部 Lisp の続き

第22章 Scheme:Uncommon Lisp
22.1 Scheme インタープリタ
22.2 マクロによる構文の拡張
22.3 真正な末尾再帰インタープリタ
22.4 Throw、Catch、Call/cc
22.5 Call/ccをサポートするインタープリタ
22.6 歴史と参考資料
22.7 演習
22.8 解答

第23章 Lisp のコンパイル
23.1 真正な末尾再帰Lisp コンパイラ
23.2 Call/cc の導入
23.3 抽象マシン
23.4 のぞき穴最適化(Peephole Optimizer)
23.5 異なる語彙規約を持つ言語
23.6 歴史と参考資料
23.7 演習
23.8 解答

第24章 ANSI Common Lisp
24.1 パッケージ
24.2 状態とエラー処理
24.3 プリティプリンティング
24.4 シリーズ(Series)
24.5 Loop マクロ
24.6 シーケンス関数(Sequence Function)
24.7 演習
24.8 解答

第25章 トラブルシューティング
25.1 何も起こらない
25.2 変数を変更してもその効果がない
25.3 関数を変更してもその効果がない
25.4 値がひとりでに変わる
25.5 組み込み関数が要素を発見できない
25.6 多値が欠落する
25.7 宣言が無視される
25.8 Lisp 処理系に問題がある?
25.9 必要な関数の見つけ方
25.10 Loop 構文
25.11 COND 構文
25.12 CASE 構文
25.13 LET 構文とLET* 構文
25.14 マクロに関する問題
25.15 Lisp のスタイルガイド
25.16 ファイル、パッケージ、システムの処理
25.17 可搬性の問題
25.18 演習
25.19 解答

付録 この本に載っているコードを取得する方法
A.1 FTP:ファイル転送プロトコル
A.2 利用可能なソフトウェア

参考文献
索引
訳者あとがき  

本書は付属データの提供はございません。

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2015年08月24日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 013
コード3行目
(first name)))
(first name))

右側の「)」を1つ削除します。
2010.07.21
1刷 015
中ほどのコード
(defun first-name (name)  "Select the first name from a name represented as a list."  (if (member (first name) *title*)    (first-name (rest name))    (first-name)))
(defun first-name (name)  "Select the first name from a name represented as a list."  (if (member (first name) *title*)    (first-name (rest name))    (first name)))

最終行のハイフンを半角スペースに訂正します。
2010.05.31
1刷 065
表3.6の下から10~9行目
(null nil)      ⇒ T
(listp x) ⇒ T
(null nil)      ⇒ t
(listp x) ⇒ t

大文字のTを小文字のtに訂正
2015.01.16
1刷 069
「3.6 表を管理するための関数」中ほど
キーではなくて値で表を検索したい場合はrassocが使える。 > (rassoc 'Arizona table) ⇒ (AZ . ARIZONA) > (car (rassoc 'Arizona table)) ⇒ AZ
キーではなくて値で表を検索したい場合はrassocが使える。 > (rassoc 'Arizona state-table) ⇒ (AZ . ARIZONA) > (car (rassoc 'Arizona state-table)) ⇒ AZ
2013.06.07
1刷 120
最終行
関数achieve-allは、変数state2
関数achieve-allは、変数current-state
2015.08.06
1刷 129
下部のコード
> (use (mak-block-ops '(a b))) ⇒ 4
> (use (make-block-ops '(a b))) ⇒ 4

「make」の「e」が抜けていました。
2015.08.24
1刷 150
下から12行目、extended-bindingsの定義の中
(if (eq bindings no-bindings)
nil
bindings)
(if (eq bindings no-bindings)
nil
bindings)))

最後に右括弧「)」を2つ追加
2015.05.26
1刷 171
下から11行目、extended-bindingsの定義の中
(if (eq bindings no-bindings)
nil
bindings)
(if (eq bindings no-bindings)
nil
bindings)))

最後に右括弧「)」を2つ追加
2015.05.26
1刷 176
1~5行目
> (pat-match '(?x ?op ?y is ?z (?if (eql (?op ?x ?y) ?z)))
'(3 + 4 is 7))
((?Z . 7) (?Y . 4) (?OP . +) (?X . 3))

> (pat-match '(?x ?op ?y (?if (?op ?x ?y)))
'(3 > 4))
> (pat-match '(?x ?op ?y is ?z (?if (eql (funcall ?op ?x ?y) ?z)))
'(3 + 4 is 7))
((?Z . 7) (?Y . 4) (?OP . +) (?X . 3))

> (pat-match '(?x ?op ?y (?if (funcall ?op ?x ?y)))
'(3 > 4))
2015.01.16
1刷 204
解答6.9 下から1~2行目
(merge 'list (sort new #'> :key cost-fn) old #'> :key cost-fn)))
(merge 'list (sort new #'< :key cost-fn) old #'< :key cost-fn)))
2015.08.24
1刷 267
中ごろ(filterの定義)
(defun filter (pred pipe)
"Keep only items in pipe satisfying pred."
(if (funcall pred (head pipe))
(make-pipe (head pipe)
(filter pred (tail pipe)))
(filter pred (tail pipe))))
(defun filter (pred pipe)
"keep only items in (non-null) pipe satisfying predicate"
(if (eq pipe empty-pipe)
empty-pipe
(if (funcall pred (head pipe))
(make-pipe (head pipe) (filter pred (tail pipe)))
(filter pred (tail pipe)))))

filterの定義全体の置き換えです。
2015.01.16
1刷 393
下から3行目
(push (deref-copy exp) answers)))
(push (deref-exp exp) answers)))
2015.01.16
1刷 845
この本に載っているコードを取得する方法
【追加情報】A.1に示されたコードを取得する方法は、原書の刊行当時(1992年)のものです。2015年4月現在、コードは、著者の個人サイト http://www.norvig.com/ にある「Top Dozen Links on Norvig.com」の中の「#5 Paradigms of AI Programming (book) with code」の「code」からダウンロードできます。
2011.03.08
1刷 898
●著者紹介 下から3行目
ノーヴィグの個人サイト(Peter@Norvig.com)
ノーヴィグの個人サイト「Peter@Norvig.com」(http://www.norvig.com/)
2011.03.08