Pythonで書くLispインタプリタ「Lispy」の実装ガイド
Pythonで実装された小規模なLispインタプリタ「Lispy」は117行のコード(約4K)で、ファクトリアル計算を0.003秒で実行する。構文解析、評価、手続き、環境、字句スコープを網羅した実装例である。
本記事は、Pythonを使用してLispインタプリタを構築する方法について、パーサー、評価機、手続き定義、環境管理、字句スコープの実装を含めて説明している。
コード規模と性能
Lispyは117行のコメント・空白行を除くソースコードで構成され、全体で約4K バイトである。これは、同じSchemeの実装であるJscheme(Java版)の1664行・57K バイトと比較して大幅に簡潔である。Jschemeはもともと「Scheme in Fifty Kilobytes」(SILK) と呼ばれていた。性能面では、Lispyは(fact 100)を0.003秒で正確に計算する。
実装の範囲と制限
記事で説明されるLispyは、字句スコープを含む環境、ラムダ式による手続き定義、構文解析と評価の各機能をカバーしている。一方、Lispyは以下の機能を意図的に省略している:コメント記法、quote・quasiquote記法、# リテラル、call/cc、末尾再帰最適化、文字列・文字・真偽値・ポート・ベクトル・数値型、および100以上のプリミティブ手続きである。さらに、エラーの検出・報告・復帰機能は実装されていない。
言語設計の背景
記事はSteve Yeggeの「If you don't know how compilers work, then you don't know how computers work.」(コンパイラの仕組みを知らなければ、コンピュータがどう動作するかを知ることはできない)という発言を引用している。Alan Kayは1972年に「ページ一枚のコードで世界で最も強力な言語を定義できる」と述べたとされており、記事はこの考え方を基礎としている。
この記事は元記事の事実のみに基づいて自動生成されました。
筆者の見立て
- Lispyの117行という実装規模がAlan Kayの主張に合致していると論じている
- Alan Kayは実装言語としてのPythonコンパイラを計算に含めるべきと異議を唱える可能性を示唆している
出典
norvig.com, "(How to Write a (Lisp) Interpreter (in Python))", https://norvig.com/lispy.html