言うまでもないことですが、関数型パラダイムには
副作用が無いなどの利点があります。
それは、整然と素直にシステムを分析・設計する上で、
非常に有用です。
一方で、現実的には関数型ではないパラダイムで
システムを設計・分析することがほとんどです。
たしかに、副作用を伴うような言語でも、再帰呼び出し
の機構を備えている言語においては、関数型パラダイム
の理念を実践することも出来ます。
しかし、再帰呼び出しには実行時のコストがかかるので、
実際には実践されていません。
そこで、質問です。
関数型パラダイムは
(1)現在、どのような局面で必要とされるのでしょうか。
(2)将来、どうなっていくのでしょうか。
---------------------
schu...@mail.goo.ne.jp
In article <bynw6.2197$5K6....@news1.dion.ne.jp> ,
"Nakata Syunsuke" <nakatas...@h9.dion.ne.jp> writes
>一方で、現実的には関数型ではないパラダイムで
>システムを設計・分析することがほとんどです。
ま、そうですよね。monad とか、いろいろ開発されてはいるようですけど。
そういうものを除いてということですよね。
>しかし、再帰呼び出しには実行時のコストがかかるので、
>実際には実践されていません。
それはそんなことはないでしょう。うまく使っている人は多いと思います。
>関数型パラダイムは
>(1)現在、どのような局面で必要とされるのでしょうか。
>(2)将来、どうなっていくのでしょうか。
正直に言えば、今は必要性はほとんどないといっていいんじゃない
でしょうか。プログラミングが、ネットワークやインタラクティブ
なものが大半になってしまったので、単純な関数型ではもうだめで
すね。
しいてあげるとすれば、データベースの関数依存性の記述ぐらいか?
あるいは、型の整合性を記述する仕組みの一つとして考える方が良
いような気がします。型だったら、静的なものでも許されるので。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球大学工学部情報工学科,
科学技術振興事業団さきがけ研究21(機能と構成)
「理論的な性質の必要性」と「強引な利用によるresearch」は別なので、
参考にならない所が多いと思いますが、
http://www.cs.nott.ac.uk/~gmh//faq.html#applications
http://www.cs.bell-labs.com/who/wadler/realworld/
を読んでみては。
Theorem proverで、proverの正当性も証明したい、
というのは自然な欲求のうちに入ると思います。
# それがreal worldがどうかは人によって違うと思いますが。
田中聡
TANAKA Satoshi
tan...@twcu.ac.jp
<9442.98...@rananim.ie.u-ryukyu.ac.jp>の記事において
ko...@ie.u-ryukyu.ac.jpさんは書きました。
> In article <bynw6.2197$5K6....@news1.dion.ne.jp> ,
> "Nakata Syunsuke" <nakatas...@h9.dion.ne.jp> writes
> >一方で、現実的には関数型ではないパラダイムで
> >システムを設計・分析することがほとんどです。
:
> >関数型パラダイムは
> >(1)現在、どのような局面で必要とされるのでしょうか。
> >(2)将来、どうなっていくのでしょうか。
>
> 正直に言えば、今は必要性はほとんどないといっていいんじゃない
> でしょうか。プログラミングが、ネットワークやインタラクティブ
> なものが大半になってしまったので、単純な関数型ではもうだめで
> すね。
総合的にはそうかもしれませんね。で、局面と書かれているので、局所
的な話でしょう。
個人的には、functional programing は詳しいとは言いがたいのですが、
アルゴリズムの改良とかには便利そうと思えます。
# 学部1年の輪講の題材が functional programing だったっけ。(^^;
んで、本題というかなんというか、「現在、どのような局面で必要とさ
れるのでしょうか」では、必ずしも必要とされてはいない、となってし
まいそうな気もします。
「現在、どのような局面において優位性があるとされており、用いられ
ているのでしょうか」とかでないと、「必要かって訊かれても、他でも
出来るしなぁ」とかなりそうな……
まぁ、優位性がすんごくあれば、その局面ではコレが決定版といった感
じで、必要の域に達することもあるけれど。
--
成田 隆興 @ エー・アイ・ソフト株式会社 NB 推進部
E-mail tak...@aisoft.co.jp
『十分間で決断し、短い理由を添えよ』
私は計算機科学について、素人ですので、
皆様方より、ご教授頂きますなら、幸いです。
さて、汎用プログラミングという考え方がございます。
また、ソフトウェアパターンという考え方もございます。
これらにはどちらも、「多くの特殊な解法の中に、
共通する基本的な型が見出せる」という含みがあります。
ところで、関数型言語では、抽象的かつ一般的な関数
から、より特殊な関数を作ることがあります。
たとえば、有名ですがfoldRightやfoldLeftのようなです。
foldRight :: (a -> b -> b) -> b -> [a] -> b
foldRight _ e [] = e
foldRight f e (x:xs) = f x (foldRight f e xs)
foldLeft :: (b -> a -> b) -> b -> [a] -> b
foldLeft _ e [] = e
foldLeft f e (x:xs) = foldLeft f (f e x) xs
こういった関数にも「多くの特殊な解法の中に、
共通する基本的な型が見出せる」という含みがある
かと思われます。
それで、素人考えでは、関数型は前述の考え方との
相性が良さそうに思われます。
パターンを扱う考え方として関数型を使うことは出来
ないものでしょうか。
さらに発展させて、以下のようにも考えました。
すべての物質は「原子核とその周りと回る電子の組み
合わせ」という共通の型(つまり元素ですが)に基づいて、
それらの型の組み合わせによって実現されています。
では同じように、ソフトウェアを何らかの共通の型に
基づいて、それらの型の組み合わせによって、実現
することは出来ないものでしょうか。
いかがなものでございましょうか。
ご回答いただけるならば幸いです。
-------------------------
中田 俊介
nakatas...@h9.dion.ne.jp
http://www-agce.informatik.uni-kl.de/~kuehne/fps/
http://www.c2.com/cgi/wiki?FunctionalPatternSystemForObjectOrientedDesign
のような例があります。
田中聡
TANAKA Satoshi
tan...@twcu.ac.jp
> (1)現在、どのような局面で必要とされるのでしょうか。
Erlangという言語が、ATMスイッチなんかをコードするのに使われているらしい
です。副作用がない所が並列計算をするさいに便利であると、手元の本
(Concurrent Programming in ERLANG)には書いてあります。
> (2)将来、どうなっていくのでしょうか。
overloding と coersion ができれば電卓がわりになると、個人的には楽しみな
んですが。
--
YAMAGATA, yoriyuki (doctoral student)
Department of Mathematical Science, University of Tokyo.