Lispインタープリタを作成しよう
Lispの一種であるClojure(言語)はJavaとClojureで作られています。 私は Clojureのソースの一部を流用・改造して自分で考えたオリジナルのLispインタープリタを作成しました この本はそのLispインタープリタの作り方を解説します。 関数は140個程度の小さなインタープリタですので、理解したり改造したりするのは容易な筈です。 このLispはJavaで書かれています。 インターブリタの作成方法を学習したい人向けの学習用本です。 またCommon LispとClojureの違いについても、書いています。 前半は無料公開しています。ソースの取得方法は05章に書いています。
Chapters
Clojureは大変素晴らしい。しかし難しかった
インタープリタを作ったきっかけ
Read, Eval, Print
コンパイル方法(前提の説明)
ソースの置き場、コンパイル方法(詳細)
実行方法
インタープリタの関数の数
ソースを読む前提知識(Collection)
ソースを読む前提知識(ISeq, Seqable)
Readの使い方
ソースのパッケージについて
Readを動かして理解する(数値)
Symbolについて軽い説明
Common Lispの nil と Readの改造
Clojureの nil と ()の違い
Symbolクラスの使い方
Readマクロの概要
Readマクロ quoteを読む
Readマクロ # 関連処理は DispatchReader
ReadマクロはLispで定義できません
Readマクロの動作確認
Print処理の概要
Print処理の動作確認(1)
Print処理の動作確認(2)メタ
メタの概要
Evalの概要
Evalの補足説明
Evalの動作確認
関数の実装
スペシャル オペレータの実装
LexicalScopeの概要
Lambda 概要
load-fileの紹介
Lisp1 と Lisp2
Varの改造と、LexicalScope
load-fileの演習とソースファイルの行カラム
namespaceの演習
クロージャの話(1)
クロージャの話(2)
defunの話
ループ構文
Common LispとClojureの共存、get問題ほか
defconstantだけで、何が出来るか
gson(json)と、SQLなど
無料公開版終了のあとがき(1)
無料公開版終了のあとがき(2)
ここから有料版、toStringについて少々
gsonを継承してコレクションは作れなかった
1+, 1-は使えない
Readマクロで出来ていない事
PersistentVectorの実装
On Lisp - defunでも、クロージャ作るってよ
参照透過性、replacaやreplacdやnconcなんて今時いらない
Java呼び出し機能、newの問題点
java.util.Dateとjava.sql.Dateの区別(独自構文)
&restがある関数のJavaでの実装
Global variable considered harmful
dynamic bindingって必要?
お気楽 Common Lisp プログラミング入門に書いていた、do の動作は Common Lisp と Scheme で異なる
マクロにするかスペシャルオペレータにするか
知らなかった lambdaがマクロになっていた話
requireのもう少し詳しい話
Namespaceの使い方(その1)
Namespaceの使い方(その2)
nsマクロの実装方法
requreの実装
call/ccって作れるの? / の話
Evalの関数の処理(その1)
Evalの関数の処理(その2)
Evalの変数の処理
Evalの変数の処理(補足:getAliases)
condに使う t やelseの話
キーワードを関数として使う
defunの引数やletの変数名が重複した時
sortの話
NamespaceとVarとSymbolの復習(1)
新しいNamespaceが出来た時に使えるシンボルは?
よく見る資料のリンク集
NamespaceとVarとSymbolの復習(2)
Java以外の話:ガーベージコレクター(GC)概要
Java以外の話:GC(逆転ポインタ法)
Author
Topics
- 公開
- 本文更新
- 文章量
- 約139,019字
- 価格
- 1,100円