の誤り
やっぱり動かないと思い至ったorz。
magnitudeクロージャからは個々のインスタンスオブジェクトthisが参照できないし、そもそもオブジェクト自身を渡す必要がある。
少し修正。
(define Complex (let ((magnitude (lambda (this) (sqrt (+ (* this.r this.r) (* this.i this.i)))))) (lambda (r i) (define this (lambda () this)) this))) (define c1 (Complex 1 2)) -> Complexオブジェクト1(クロージャ) (define c2 (Complex 1 3)) -> Complexオブジェクト2(クロージャ) (c1.magnitude c1) -> sqrt(5) (c2.magnitude c2) -> sqrt(10)
まったく意味ない。
magnitudeはComplexコンストラクタ関数のプロパティにしかなってない。残念。
レキシカルスコープのフレームワークでプロトタイプオブジェクトのようなものを表現できないかと考えたけれど、
上位スコープのクロージャから下位スコープのクロージャを参照させるためには、
上位スコープ内に下位スコープのクロージャをset!してやらないとだめかも。
ああ、いい方法はないものか・・・
・・・まとにかく、そんな邪念を振り払ってJavaScriptの勉強を続けます。