Lisp

JavaScriptでおもちゃのLispを作ろう(5)〜組込み関数編〜

前回までに組込み関数を一切定義していないピュアなLisp処理系ができました。今回は必要最小限の組込み関数を実装します。 /* * 関数に名前をつけて登録する。引数lazyがtrueのときは、関数の引数を評価しない。 * スペシャルフォームのときtrueをセットする…

JavaScriptでおもちゃのLispを作ろう(4) 〜評価器編〜

いよいよ評価器の実装を行います。Lispの評価器はeval()関数を実装することです。eval()関数はLisp自身で実装することができます。Lisp自身によるeval関数の実装はLispの古典であるLisp1.5マニュアルによると以下のようになります。 apply [fn;x;a] = [atom[…

JavaScriptでおもちゃのLispを作ろう(3) 〜リーダ/パーサテスト編〜

これまでに実装したのは、文字列からS式を読み込むリーダとその逆のプリンタです。今回はそれらの機能が期待した通りの動作をするかテストします。JavaScript用の自動単体テストフレームワークJsUnitがありますが、ここは趣味のプログラミングなので、オレ流…

JavaScriptでおもちゃのLispを作ろう(2)〜プリンタ編〜

今日は前回に引き続き、リーダ関数の残りとリーダ関数と反対のプリンタ関数を実装します。S式を読み込むリーダ関数のサブ関数であるreadString()とreadList()関数は次のようになります。Lispの文字列はエスケープもいろいろできるのですが、複雑なことは後…

JavaScriptでおもちゃのLispを作ろう(1)〜リーダ編〜

こんなものは数え切れないくらい既に沢山あると思いますが、JavaScriptでおもちゃのLispを作り始めたので日記として書いておきます。普段は会社では仕事でC++を使ってプログラムを書いていますが、趣味のプログラミングというのは、やっぱりおもちゃのような…