- 906 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:53:11 ]
- >>888
では混乱を無くすために クロージャ=Schemeのクロージャ(あるいはラムダ式、無名関数) と定義するよん。他の言語も右に倣えだから意味論はほとんど同じ。 例えばクロージャのある言語ではnewのような特別な構文を 定義することなくオブジェクトの生成を記述できる。 (define new-point (lambda (x y) ;---メンバ変数に相当、隠蔽される (lambda (message . args) ;---this、selfに相当 (case message ((getx) x) ;--- getter ((gety) y) ((setx) (set! x (car args)) x) ;--- setter ((sety) (set! y (car args)) y) (else (error "unknown method " message)))))) 実際にやっていることはクロージャを生成するクロージャを 定義しただけ。それでも以下の様にオブジェクトとして扱える。 (define point (new-point 1 2)) ;メンバ変数はどうやってもアクセサ経由でしか参照できない (point 'getx) ;=>1 (point 'gety) ;=>2 (point 'setx 3) (point 'getx) ;=>3
|

|