こんにちは。早川です。

On Mon, 21 Apr 2003 21:28:33 +0900
shelarcy <shelarcy / capella.freemail.ne.jp> wrote:
> >> ええと、つまり、オブジェクト指向のやり方では役割ごとに次々と違うオブジェクトを
> >> 作っていくのに対し、関数型言語では次々と特殊化・カリー化した関数を定義していく
> >> ことになります。
> >
> > 特殊化とは具体的にどういう事でしょうか?
> 
> 各データ構造(や外部の処理)ごとに対応する関数を定義するということについて言っています。
> もちろん、構造に共通点が見出せるなら Refacroring してやった方がいいと思いますが……

ということは普通に関数を定義する事を敢えて
特殊化した関数を定義すると言われたのでしょうか。
-- すみません、重箱の隅をつつくようで

Refactoring といえば、ここの draft が参考になりそうです。
http://www.cs.kent.ac.uk/projects/refactor-fp/
Wiki も初心者にはありがたい情報が多いです。
http://www.haskell.org/hawiki/
-- 最近あたらしくなったんですよね

> > カリー化した関数を定義するだけなら関数型でない言語でも可能ですよね。
> > それだと関数型言語のメリットとは単なる記述性という事に
> > なってしまわないでしょうか。
> 
> ある意味ではそうです。
> ただし、命令型の言語では複数の種類に分かれてしまうものを、関数型では
> 一つにまとめてしまうことができるので、そこに威力があると思うのですが……

"なぜ関数プログラミングは重要か" では逆に、細かく分割できるのが
関数型のメリットだと書いてありました。

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

これは関数型言語に限らない一般的な手法ですよね?
-- 実際よくやります

あれから調べて、以下の文書も参考になりそうでした。

・"Structuring Graphical Paradigms in TkGofer"
http://www.cs.chalmers.se/~koen/Papers/tkgofer.ps
・"A Functional Analysis and Design Methodology"
http://www.cs.ukc.ac.uk/pubs/2001/1152/index.html

"Object-Oriented Style Overloading for Haskell" の例にもあった通り
オブジェクト指向言語での class を単純に Haskell の class に当てはめた
デザインも場合によってはアリかなと思いました。
-- もちろん Haskell では instance も定義する必要があります

ここら辺はもう経験を積んで判断していくしか無いですよね。
というわけで、まずは仕事で使っているライブラリを
少しずつ Haskell に移植してます。
-- 何をするにも IO が付きまとう..

引き続き面白そうな情報がありましたら教えて頂けたらと思います。

--
SH
tetryl / tokyoprogrammer.com


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