関数型言語

このエントリーをはてなブックマークに追加
968デフォルトの名無しさん
OO言語では、その機能を十全たるものにするためには
しっかりしたクラス設計が欠かせないとされている。
そして、その際には、属性と方法を適切に弁別する作業が欠かせない。
つまり、「良い」OOからしてみると、
属性と方法が渾然一体となってしまうような状態は好ましいとはいえない。
一方で、関数型は、OO的に言うところの方法が
同時に属性でもあり得ることを奨励し、
そのことによってより抽象的なアルゴリズムを構築でき、
表現力が高まるとしている。
その意味においては、
両者は理想とする方向が逆なのではないかと思った。

>>964
ちゃんと説明しろよ。
どのように意味不明なのか。
>>968
使っている言語仕様において関数が値として扱えるからと
言って、属性と動作を混同するような人がいるとは思えない
んですが。
例えば、2という値とaddという関数を混同する人がいますか?
970デフォルトの名無しさん:01/12/03 14:54
>>969
そのことによって何が言いたいのかが不明。
いるとは思えないからなんですか?
971デフォルトの名無しさん:01/12/03 15:16
>>970
好ましくない状況では無いと言いたいんでは?
972デフォルトの名無しさん:01/12/03 16:20
すまん、益々意味がわからん。
もうちょっと噛み砕いて、というか、全部まとめて説明してくれ。
973デフォルトの名無しさん:01/12/03 16:23
1000
974デフォルトの名無しさん:01/12/03 22:57
そろそろ1000だけど次スレどうするよ
975デフォルトの名無しさん:01/12/03 23:00
次スレ
関数型言語Part2
http://pc.2ch.net/test/read.cgi/tech/1007387924/
976デフォルトの名無しさん:01/12/04 00:19
>>968
>そして、その際には、属性と方法を適切に弁別する作業が欠かせない。
>つまり、「良い」OOからしてみると、
>属性と方法が渾然一体となってしまうような状態は好ましいとはいえない。

EiffelはOOだけど属性と方法を弁別しないぞ〜

foo: INTEGER   -- 変数
foo: INTEGER is 10   -- 定数
foo: INTEGER is do 〜 end   -- 関数

Eiffelは外から変数に代入できないのでクラスの利用者には
どれで実装されていても関係ない。

proc(entity.foo)

entity.foo はクラスの利用者にはどういうふうに実装されているか分からない。

それに proc(f: FUNCTION [ANY, TUPLE, INTEGER]) is do 〜 end

みたいにすると関数を引数として渡せる。

Smalltalk も "block closure" あるし。
>>976
同意。っつーか、
OO言語で「方法」を抽象できないものがあるのなら、
それはOO言語として不完全だとすら言えると思うな。

そもそも関数型とOOは直交している概念だと思うのだがなあ。
>>977
直交する「関数型」軸と「OO」の間に何が来るだろ…
アセとかCOBOLとかになるのかな?
>>972
困らないから別にいいってだけじゃん。
そんなこともわからないなんてバカすぎ。
なるほど、
しかし、お前達の議論は俺の議論を曲解している。
俺は「ある意味」といっている。
ある意味とは、in some senseと言う意味であり、
部分的にそう言える場合があると言う意味だ。
従って読解力の点で馬鹿過ぎるのは>>979

また、直交することが
どうして部分的に逆であることと排他なのかがよく分からない。

ま、他にもいうことはあるが、機会があったらな。
そんなかんじで。
じゃな!
あっ、言いそびれたが、
やはり言語は実用されているものを例とすべきだ。
Eiffel等という正直に言って普及しているとは言いがたい言語を例とするのは、
例示としては頂けない。
現在の普及率などから考えて、C++やJavaなどを例示とすべきだ。
その手の議論は言語的な広がりがなくなる。