shelarcyです。

On Sun, 20 Apr 2003 18:47:10 +0900, Shinya Hayakawa 
<tetryl / tokyoprogrammer.com> wrote:
> 僕も O'Haskell については良く知りませんが、
> Haskell 標準の機能でないものはできるだけ使いたくありません。
> 決して難しい事をしようとしてるとも思えないのですが..
>
>> ええと、つまり、オブジェクト指向のやり方では役割ごとに次々と違うオブジェクトを
>> 作っていくのに対し、関数型言語では次々と特殊化・カリー化した関数を定義していく
>> ことになります。
>
> 特殊化とは具体的にどういう事でしょうか?

各データ構造(や外部の処理)ごとに対応する関数を定義するということについて言っています。
もちろん、構造に共通点が見出せるなら Refacroring してやった方がいいと思いますが……

> カリー化した関数を定義するだけなら関数型でない言語でも可能ですよね。
> それだと関数型言語のメリットとは単なる記述性という事に
> なってしまわないでしょうか。

ある意味ではそうです。
ただし、命令型の言語では複数の種類に分かれてしまうものを、関数型では
一つにまとめてしまうことができるので、そこに威力があると思うのですが……


> 論点がずれてしまったような感じがします。
>
> 質問の仕方が悪かったのかもしれませんが
> 自分のやりたいのは Haskell でフレームワークを構築する事です。
> そこでオブジェクト指向言語で最も使われるパターンの1つである
> Template Method の実現方法を質問させて頂きました。
> 単に便利な関数の寄せ集めではなく、そこに構造を持たせて
> 初めてフレームワークと呼べると思います。
> -- オブジェクト指向ではオブジェクト階層で構造を表現するのに対し
> -- Haskell では高階関数を用いて、それを表現する??

......なんというか関数型言語の場合、グループに注目するのが重要だと思います。そこにパターンが見出せてなおかつ記述が冗長にならなければ低レベル関数を
書いて高階化すればいいし、そうでなければ面倒でもいちいち書いていくと。
(そういうのが念頭にあったので、強制的にVisitorなオブジェクトのようなものって言ったわけですが)







-- 
shelarcy <shelarcy / capella.freemail.ne.jp>
http://page.freett.com/shelarcy/ 

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/