はじめてのscheme制作
無料で読める本
2024年の夏頃から、 r7rs-pico と call/ccが動くschemeを Javaで作成し始めた。 この小さなLisp (r7rs-pico と call/cc仕様) は、それなりに動作した。 調子に乗った私は、r7rs-smallを実装しようと試みたのだが、あまりに難しすぎた。 この本は、『はじめてscheme制作に挑んだ私が』、苦労した点を文章に残して置こうと思い書いた本である。 schemeの実装についての日本語の記事・情報があまりに少ないため書きたかったというのもある。 今後scheme実装に挑む日本人のため、少しでも役に立つ本となれば幸いである。 また、私は、scheme実装に詳しくない為、誤り等ありましたら、ご指摘いただけると助かります。
Chapters
動機、対象読者
謝辞
仕様書の日本語訳と、動作確認環境
r7rsの仕様書と、本インタープリタの実装方針
ソースの取得方法・コンパイル方法
基本のデータ型
ペア pair (ときにはドット対 dotted pair と呼ばれる) について
文字について
環状リスト(横方向)
環状リスト(縦方向も含む)
環状リスト(Print処理の注意)
3impのコンパイラと仮想マシン
仮想マシンの命令(1)
衛生的マクロ
3impのVMの環境と、JSchemeMinの環境
3impのVMの環境
JSchemeMinの環境の説明、次に2つの環境の統合へ
Javaで書いた組み込み関数と、Lispをコンパイルしてできた関数
組み込み関数の実装
applyの実装方法の悩み
map系関数の悩み
let系関数の分析
CommonLisp風の単純なマクロ
letrecの実装
多値の分析
valuesと、call-with-valuesの実装
内部定義
テストの方法
どこまで作ったのか?
どこまで作ったのか?(char)
どこまで作ったのか?(read)
どこまで作ったのか(process-context)
テストの例
元々のテストコードと章毎に分割したテスト
テストコードで発見したマクロの問題
興味深い記事(CKマクロ)
3impのコンパイラとVMの話(続き)
3impのコンパイラとVMの話(lambdaの複数のbody文対応)
そろそろ終わり
JSchemeMinのソース解析
VMの命令(簡単に説明)
Author
Topics