オブジェクト指向と関数型言語
[id:lethevert:20050731:p3]の続き。
オブジェクト指向言語は、メソッド呼出にthis(self)ポインタが含まれるから、関数ポインタが使えないという趣旨のことを書いたけれど、そもそも関数型言語のようにカリー化がサポートされているなら、メソッドでも、それ以上に複雑なものであっても、関数(メソッド)を束縛することはできるはず。
例によっていい加減な言語(Clean風?)で、コンストラクタは、こんな感じにかけるかな?
type Foo = record value1 :: Int value2 :: Int getResult :: () -> Int Create_Foo :: Int Int -> Foo Create_Foo x y = Foo value1 = x value2 = y getResult = calc foo where calc this () = 3*this.value1*this.value1 + 2*this.value2 + 1