概要
LISP FROM NOTHING は、最小限のLISP言語実装とその自己解釈・自己コンパイルの可能性を探求する書籍。 初期LISPハッキングの歴史的背景や、Lambda Calculusとの関連性も詳述。 複数のLISP実装例やソースコード、図版、付録も豊富に掲載。 第2版ではLambda Calculus章の追加やマクロのquasiquotation導入など内容を拡充。 書籍・PDF・ソースコード・関連アートワークもLulu.com等で入手可能。
LISP FROM NOTHING 概要
- 著者 による2025年発行のLISP解説書、全344ページ構成
- 19点の図版 と6" x 9"サイズの判型
- 紙版(ペーパーバック・ハードカバー)、PDF版 をLulu.comで注文可能
- 書籍内の 全ソースコード を無料でダウンロード提供
- 試し読み用PDF や 正誤表(初版) を公開
内容と特徴
- 最小LISP言語 での自己解釈・自己コンパイルの実現可能性を探究
- パンチカードやテレタイプ、メインフレーム時代 のLISPハッキング体験の回顧
- LISPとラムダ計算(Lambda Calculus) の関係性を詳細解説
- メタ循環評価器 から Cプログラムを出力するLISPコンパイラ まで、複数の実装例を掲載
- 第2版 では以下を追加・改良
- Lambda Calculusとの関係を扱う新章
- マクロ解説におけるquasiquotation導入
- 誤字脱字・記述ミスの修正
- 文体の滑らかさ向上
コード・付録・リソース
- Common Lispによるメタ循環LISPインタプリタ のソースコード
- Schemeによるメタ循環LISPインタプリタ のソースコード
- 約400行の自己ホスティングLISPコンパイラ 実装例
- LISPによるガーベジコレクタ の実装
- 書籍掲載の全LISPコード(zip, 約100KB) を一括ダウンロード可能
- Lambda Calculus章のSchemeコード(zip, 約6KB) も提供
- Postscript形式のパンチカード画像生成ツール を配布
- 第1章タイトルページのアートワーク をPostscriptファイルで公開
その他情報
- ハードカバー版 は一般書店での小売りは未対応
- Nino Ivanovによる書籍レビュー動画 をYoutubeで公開
関連リンク
- Lulu.com での書籍・PDF注文ページ
- ソースコード・付録ダウンロードページ
- Youtube書籍レビュー動画
提供されたzipファイルの中のchurch.scmを見てみると、リストを構築するために使われている関数がいくつかあるね。 (define kons (lambda (x) (lambda (y) ((pair false) ((pair false) ((pair x) y)))))) (define kar (lambda (x) (first (second (second x))))) (define kdr (lambda (x) (second (second (second x))))) (define nil ((pair true) ((pair true) false))) (define null first) (define atom (lambda (x) (first (second x)))) リストの各要素に対して余分に2つのブール値が必要なんだ。原子を認識するためのものは多分必要だけど、nilを認識するためのものは必要ないよね。 (define kons (lambda (x) (lambda (y) ((pair false) ((pair x) y))))) (define kar (lambda (x) (first (second x)))) (define kdr (lambda (x) (second (second x)))) (define nil ((pair true) false)) (define null (lambda (x) (((second x) (lambda (a) (lambda (d) (lambda (z) false)))) true))) (define atom (lambda (x) (first x))) null+car+cdrを使う代わりに、マッチング構造を使うことで通常は回避できるよ。例えば、(((second list) (lambda (a) (lambda (d) (lambda (z) deal_with_car_a_and_cdr_d ) deal_with_nil)