2007-03-21から1日間の記事一覧

これを実行させてみました

実行したときの様子。VERSION:0.04て出ますが、0.05の誤りですorz VERSION:0.04 OBJECTSTACK:999 CSTACK:999 HEAP:5000 (load "evaltest.scm") <unspecified> superClass <closure ((x) (define (self) self) (define (+! y) (set! x (+ x y))) self)> theClass </closure></unspecified>

実際のプログラム

どんなプログラムになるかです。 たとえば、オブジェクト指向で言うところの継承っぽいことができないか実験しました。 (define (superClass x) (define (self) self) (define (+! y) (set! x (+ x y))) self) (define (theClass y) (superClass (+ y 10)).(…

拡張のあらまし

上のURLの抜書きです。 クロージャに結合されている環境下でダイレクトに式が評価できると面白いかなと思い、R5RSにはないシンタックスを追加実装してみました。 こんな感じです。 ・追加シンッタクス名(本名):eval-with-environment ・追加シンタックス…

自分の実装だから勝手に拡張

どんな風に拡張したかは http://www.d2.dion.ne.jp/~ujiie/bs/ に書いてます。

じゃどんなふうにしたいの自分?

シンプル 強力 Schemeの持つ意味(セマンティクス)を超えない を基本理念に、 (obj1.obj2.obj3..objn arg1 arg2 ... argm) なんて書けるScheme実装に拡張。 なんじゃそりゃ!(自分の心の叫び) というわけで、

じゃ、クロージャの内部変数にアクセスできればいいわけ?

それだとなんかちょっと片手落ちな感じ。 クロージャの内部変数にアクセスすることをもっと一般化して、もっと強力にしなくては。 そうですね・・・ Schemeはシンプルかつ強力でなくてはならないのだ!

で、Schemeは名前の階層化がないので、実用にはちょっとつらいよなぁ

と思うときがあったりします。 SICPなんか読むと、 Schemeでもオブジェクト指向っぽくメッセージパッシングができてすごいんだぜ、なんてのがありました。 確かこんなやつ(実行させてないのでエラーが多分出ます)。 (define (foo x) (define (readx) x) (d…

JavaScriptも

どうやら同じで、 o.v oオブジェクトのvメンバ(変数?)にアクセスしています。

Rubyは

上述のとおりで、 o.m ポインタの概念がないので、シンタックスが変化することはないです。

C++(Cのオブジェクト指向拡張といっていいのか?)

も同様のシンタックスですよね。 o.m o->moオブジェクトのmメソッドにアクセス。 oがポインタかどうかでシンタックスがかわります。

Cの構造体メンバへのアクセスのシンタックス

s.m s->m s構造体変数のメンバmにアクセス。 sがポインタかどうかでシンタックスがかわります。

一方で、

オブジェクト指向言語と呼ばれているものも使ってみて、 これは便利だなぁと思うこともあったり。 一番は、名前の階層化かなぁ。 たとえばruby。 o.m これはoオブジェクトのmメソッドを呼んでいます。 この、 o.m のように、 対象となるオブジェクトoに対しm…

自分好みのSchemeもどき実装で遊ぶ!

前からSchemeは好きで、趣味の範囲で実装しています。 R5RSの全実装は無理。 とくに数値周り。 私には無理です。面倒なので整数のみ!(ええ!) じゃ、どうせ趣味だし、 これで何か実用的なことをしようということでもないので、 好き勝手に独自拡張して遊…