2009-08-01から1ヶ月間の記事一覧

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

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

Yコンビネータのお話

過去にもいろいろなブログで何度も取り上げられて話題になりましたが、自分なりの理解で書いてみました。Yコンビネータはシンプルでありながら、不思議で奥が深いので興味をそそる要素があるのでしょう。JavaScriptも広い意味では関数型言語であり、λ計算と…

クロアチア

実は、8/8〜8/19まで夏休みをとってクロアチアに行って来ました。首都のザグレブからアドリア海のザダール、トロギール、スプリット、ドブロブニク、さらにボスニア・ヘルツェゴビナのモスタルをレンタカー(モスタルのみバスツアー)で回ってきました。日本…

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

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

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

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

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

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