世界を動かす技術を、日本語で。

何もないところからのLisp、第二版

概要

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書籍レビュー動画

Hackerたちの意見

提供された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)

でも、(ATOM NIL)は真でも偽でもないよね。

著者の本を何冊か読んだ者として、またコンパイラをほぼ10年勉強してきた者として、著者自身について本当に興味があるんだ。これらの作品は、理解できるけど自分では絶対に達成できないものだよ。まるで深く個人的な詩のような文化的な遺物で、純粋にそのプロセスのために作られている。実用的ではないし、最先端でもないし、研究レベルでもないけど…個人的な旅なのかな?もし著者がこれを読んでいたら…あなたのビジョンを教えてくれない?

これに賛成!著者との長編動画インタビューがあったら素晴らしいね。

私の本を読んで、私の作品をそんなに美しい言葉で表現してくれて本当にありがとう!君はほぼ自分の質問に答えたようなものだよ!私のモチベーションは、私が美しいと思うものを創造することなんだ。ビジョンは、知識を求める人々にできるだけシンプルな方法で伝えること。ここでの「シンプル」は、必ずしも簡潔な形を意味するわけではなく、消化しやすい形を指しているんだ。私は普段「自分」についてあまり話さないんだけど、誰も聞いてくれないと、何を言ったらいいのか難しいな。

著者の「ラジャ・ヨガ再考」を読んでみて。

「リストは他の何物でもなく、代替手段だよね?」(出典:https://aphyr.com/posts/340-reversing-the-technical-intervie...、これを読むといつも面白いし、その続きのやつもね:https://aphyr.com/posts/341-hexing-the-technical-interview)。

本はすごく良さそうだね。ただ、LispがAI研究だったことを考えると、裏表紙に「AI禁止」のバッジがあるのはちょっと皮肉だなと思う。

これを書いた時に「ジェネAI」は使われてないって読んだ。

関連:Lisp from Nothing - https://news.ycombinator.com/item?id=24809293 - 2020年10月(コメント29件) Lisp from Nothing - https://news.ycombinator.com/item?id=24798941 - 2020年10月(コメント5件)

ここにいる人で「実践コンパイラ構築」を読んだ人いる?短めのコンパイラ本の中では結構いい方だと思うし、アセンブリについてもう少し学ぶには良さそうだよね。

すごくいい感じ!さっきコピーを注文したばかり。今、ピーター・サイベルの「実践共通リスプ」を再読して、リスプの世界に再び浸ろうとしてるところだから、タイミングが良かったかも。

リスプ大好きなんだけど(Emacsユーザーで、個人プロジェクトではRacketをよく書いてる)、リスプコミュニティでメタ循環評価器にこだわるのが理解できないんだよね。確かに美しいとは思うけど、なんでそんなに中心に据えられるの?美しさや教育的価値を除けば、魅力がよくわからない。メタ循環評価器の裏での重労働はポーランド記法の構文や実際の実装によるものだと思うし、これらの概念はあまり注目されてない気がする。教えてくれるリスパーはいない?

リスプ歴は長いけど、言語が自分の言語をコンパイルできないとなんか変な感じがする。誰かの下着を履いてるみたいだよ。

メタ循環評価器は、コードがデータであり、データがコードであることを示してるんだよね。ある意味、マクスウェルの方程式みたい。計算のシンプルな証明でありながら、すごく neat な言語を実装してる。

著者の「空からのスキーム9」って本を買って、すごく良かった。言語をゼロから作る方法がよくコメントされてて説明されてるコードがたくさんあって、めっちゃ楽しかった。 https://t3x.org/s9book/index.html

みんな、レディバードがデフォルトでClojureScriptになるって聞いた? /夢