Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

functional - now and future

4 views
Skip to first unread message

Nakata Syunsuke

unread,
Mar 28, 2001, 10:38:07 AM3/28/01
to
はじめまして。中田と申します。
理論的/技術的なことではなくて、
現実的なことをお尋ね申し上げます。

言うまでもないことですが、関数型パラダイムには
副作用が無いなどの利点があります。
それは、整然と素直にシステムを分析・設計する上で、
非常に有用です。

一方で、現実的には関数型ではないパラダイムで
システムを設計・分析することがほとんどです。

たしかに、副作用を伴うような言語でも、再帰呼び出し
の機構を備えている言語においては、関数型パラダイム
の理念を実践することも出来ます。
しかし、再帰呼び出しには実行時のコストがかかるので、
実際には実践されていません。

そこで、質問です。
関数型パラダイムは
(1)現在、どのような局面で必要とされるのでしょうか。
(2)将来、どうなっていくのでしょうか。

---------------------
schu...@mail.goo.ne.jp


Shinji KONO

unread,
Mar 28, 2001, 6:50:51 PM3/28/01
to
河野 真治@琉球大情報工学です。

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(機能と構成)

TANAKA Satoshi

unread,
Mar 29, 2001, 12:49:52 AM3/29/01
to
> 関数型パラダイムは
> (1)現在、どのような局面で必要とされるのでしょうか。

「理論的な性質の必要性」と「強引な利用による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

Narita Takaoki

unread,
Mar 29, 2001, 1:29:12 AM3/29/01
to
成田です。

<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
『十分間で決断し、短い理由を添えよ』

Nakata Syunsuke

unread,
Mar 29, 2001, 6:53:35 AM3/29/01
to
中田です。
ご回答ありがとうございます。

私は計算機科学について、素人ですので、
皆様方より、ご教授頂きますなら、幸いです。

さて、汎用プログラミングという考え方がございます。
また、ソフトウェアパターンという考え方もございます。
これらにはどちらも、「多くの特殊な解法の中に、
共通する基本的な型が見出せる」という含みがあります。

ところで、関数型言語では、抽象的かつ一般的な関数
から、より特殊な関数を作ることがあります。
たとえば、有名ですが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


TANAKA Satoshi

unread,
Mar 29, 2001, 7:16:06 AM3/29/01
to
> パターンを扱う考え方として関数型を使うことは出来
> ないものでしょうか。

http://www-agce.informatik.uni-kl.de/~kuehne/fps/
http://www.c2.com/cgi/wiki?FunctionalPatternSystemForObjectOrientedDesign

のような例があります。


田中聡
TANAKA Satoshi
tan...@twcu.ac.jp

Yoriyuki Yamagata

unread,
Aug 7, 2001, 6:47:01 PM8/7/01
to
"Nakata Syunsuke" <nakatas...@h9.dion.ne.jp> writes:

> (1)現在、どのような局面で必要とされるのでしょうか。

Erlangという言語が、ATMスイッチなんかをコードするのに使われているらしい
です。副作用がない所が並列計算をするさいに便利であると、手元の本
(Concurrent Programming in ERLANG)には書いてあります。

> (2)将来、どうなっていくのでしょうか。

overloding と coersion ができれば電卓がわりになると、個人的には楽しみな
んですが。

--
YAMAGATA, yoriyuki (doctoral student)
Department of Mathematical Science, University of Tokyo.

0 new messages