Lisp > 参考書 > 入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算

入門Common Lisp

  入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算
新納 浩幸
毎日コミュニケーションズ
2006-09

目次

PREFACE_ はじめに

1章 Lispの概要

 1.1 手続き型プログラミング言語と関数型プログラミング言語
    チューリングマシンと手続き型プログラミング言語
    λ計算と関数型プログラミング言語
    手続き型と関数型
 1.2 LISPの歴史
 1.3 その他の関数型プログラミング言語
    ML
    Scheme
    Haskell
 1.4 Common Lispの処理系
    xyzzy
    GCL(GNU Common Lisp)
    CLISP
 1.5 Emacs内での使用(Meadowのインストール)
    MeadowでGCLやCLISPを利用する

2章 xyzzy上でのLispプログラミング

 2.1 xyzzy内でのLispの利用
 2.2 *scratch* バッファ内での式の評価
    対話的なプログラミング
 2.3 関数名の補完機能
    コメント
 2.4 プログラムの保存と読み込み
    xyzzyによるファイルの保存
    xyzzyによるファイルの読み込み
 2.5 本書での表記法
 2.6 xyzzy、Meadowのキー表記について
 2.7 MeadowでGCLを利用する
    LinuxにおけるGCLの利用

3章 Lispの基本文法

 3.1 式と評価
    式を評価する
    eval
 3.2 アトムとリスト
    アトム
    tとnil
    リスト
 3.3 画面への出力
 3.4 関数の定義
    局所変数
    変数への代入
 3.5 四則演算
 3.6 条件分岐と述語
    if
    cond
 3.7 繰り返し
 3.8 リスト処理関数
    carとcdrとcons
    コンスセル
    その他のリスト処理関数
 3.9 AリストとPリスト
    Aリスト
    Pリスト
 3.10 破壊的リスト操作
 3.11 文字列

4章 式は評価され値を返す

 4.1 副作用のある式も値を返す
 4.2 数や文字列はそれ自身を返す
 4.3 条件式はnilを返すかどうかだけがチェックされる
 4.4 ifはandとorで書ける
 4.5 本特徴とCプログラミングとの関係

5章 繰り返しは再帰呼び出しで書く

 5.1 階乗
 5.2 最大公約数
 5.3 リストの反転
    再帰によるリスト反転
 5.4 フィボナッチ数列
    フィボナッチ数を手続き的に求める
 5.5 クイックソート
 5.6 ハノイの塔
    xyzzyによるハノイの塔のパズルのデモ
    xyzzyによるハノイの塔の解法
 5.7 末尾再帰
 5.8 本特徴とCプログラミングとの関係

6章 代入式は使わない

 6.1 参照透過性
 6.2 局所変数を引数に
    素数判定
 6.3 prognを使わない
 6.4 本特徴とCプログラミングとの関係

7章 高階関数が利用できる

 7.1 高階関数内で関数を実行
    切符番号の問題
 7.2 関数本体を引数に
    lambda
    二分法
    map
 7.3 本特徴とCプログラミングとの関係

8章 λ計算

 8.1 λ計算とは
    λ計算事始
 8.2 λ式
    関数抽象と関数適用
    λ式の括弧の省略
    型なしλ計算
    カリー化
 8.3 β変換
 8.4 Church-Rosserの定理と正規化定理
 8.5 λ式による関数
 8.6 λ式による制御構造
 8.7 Lispによるλ計算

APPENDIX

 xyzzyのコンパイル機能
 GCLのコンパイル機能
 Windows版GCLのコンパイル機能

あとがき

INDEX:索引

出版社情報

著者紹介

  • 新納浩幸

    1961年長崎県に生まれる。
    1985年東京工業大学理学部情報科学科卒業。
    1987年東京工業大学大学院理工学研究科情報科学専攻修士課程修了。
    茨城大学工学部情報工学科助教授・博士(工学)
    (本データはこの書籍が刊行された当時に掲載されていたものです)

  • 著書 http://nlp.dse.ibaraki.ac.jp/~shinnou/books.html#Common-Lisp

    (4) 「入門 Common Lisp - 関数型4つの特徴とλ計算」 新納浩幸,毎日コミュニケーションズ (2006)

    2006年10月17日、、、、後悔と懺悔

    大変な勘違いを指摘されました。すみません。
    この件は出版社の正誤表には記載がありません。

    (1) p.68 のなかで、(eql 'dog 'Dog) で nil になっている。
    Common Lisp ではシンボルの大文字と小文字は区別されない。
    Emacs Lisp では区別されるので、xyzzy でも区別される。
    すっかり忘れていた。

    (2) p.70 で、while を解説している。
    xyzzy では while はあるけど、 Common Lisp では while なんかない。
    これも Emacs Lisp とゴッチャになっていた。
    そもそも繰り返しなら do を解説すれば簡単だった。

    2007年11月13日
    末尾再帰のフィボナッチ数列
    ある方から末尾再帰を解説するなら、フィボナッチ数列を末尾再帰で書いて、その効果を示した方が本の趣旨にあっているという指摘を受けました。その通りでした。その方が示してくれたコードは以下です。

    (defun fib (n)
    (iter 1 n 0 1 1))
    
    (defun iter (m n x y z)
    (if (= m n)
    y
    (let ((u y) (v z))
    (iter (1+ m) n u v (+ u v)))))

    コメントありがとうございました。

読書メモ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-09-01 (日) 20:04:08 (75d)