952 :
デフォルトの名無しさん:01/12/02 23:20
>>949 C言語の前置/後置インクリメントなんかは
「副作用」という概念丸出しですが?
954 :
デフォルトの名無しさん:01/12/03 00:31
?
>>951 逆じゃないよ。C#のデリゲートなんて、メソッド
をデータとして扱う典型例じゃん。
>>951,955
非常に微妙な問題だが、私の解釈では少し違う。
まず、純粋なオブジェクト指向では、メソッドもデータも単独で存在する事はあり得ない。
(define オブジェクト '(識別子 データ メソッド))
という感じになるが、この中のデータもまたオブジェクトになっている。
(こういう定義は、難しいねぇ。
再帰は再帰によって定義されるからね。)
データとメソッドをいっしょにしたオブジェクトを扱うのが、OOで
データとメソッドを区別しつつ扱いが同等なのが、関数型。
逆とも言えないが、同じとも言えない。
微妙な関係だ…。
あと、C#のデリゲートはCで言うところの関数ポインタにあたるが、
主にイベント処理を扱うために考案されているので、
そのメソッドだけを取り出して、どうこうするのはC#らしくないかもしれない。
また、これはデザパタで言うところの、マルチキャストパターンにあたる。
http://objectclub.esm.co.jp/evolutionalDesignWithPatterns/index.html
あほくさ。例えばCLOSでOOが出来る。
それで十分だろ。
実用とかけ離れた抽象的議論はくだらねぇよ。
CLOSは実用的ですか
>>955,956
- ある意味 - OOと逆。
一応ちゃんと読んでくれよな。
それは意味のある議論なのか?
>>960 俺としては、お前がちゃんと読んだ上で
回答してくれればそれで良い。
今後は気をつけるように。
>>962 誰かと人違いしないでくれ。
意味がわから無いかつ説明しないことなら書き込むなよ。
最近このスレでそうやって関数型言語を無理やり批判する人物を見かけるが、
全部同一人物か?
964 :
デフォルトの名無しさん:01/12/03 13:46
えらそうにしてるけど,
>>951は「ある意味」などと曖昧なことを書いて
技術的な議論する気はないわけだね.「メソッドとデータの区別をなくす」
という表現も意味不明.
965 :
縞栗鼠(シマリス)の親方:01/12/03 13:48
966 :
デフォルトの名無しさん:01/12/03 13:55
909とか948で関数型に関する主張がなされており、
それについて色々批判があったので、
他に考えられる関数型の特徴と言えば、
関数を他の関数の引数として使用できる、
つまり、それこそある意味関数が「値」でもあることなのでは
なかろうかと考えレスをしてみた。
>>964 >「メソッドとデータの区別をなくす」
>という表現も意味不明.
むしろえらそうなのはお前。
どの点が意味不明なんですか?
>>966 まあ、俺はメソッドとデータの区別をなくすとかいう表現は
そんなことだろうと思ってた。
で、それがオブジェクト指向とどういう意味で逆なんだ?
詳しく説明してくれ。
説明しなきゃわからんことはちゃんと説明しないと意味が無い。
968 :
デフォルトの名無しさん:01/12/03 14:33
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
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などを例示とすべきだ。
その手の議論は言語的な広がりがなくなる。
ここは旧スレ。
人は、旧スレになってから粋がる奴を厨房と呼ぶわ。
ghc5入れようとしたらかなりでかくて萎えた。
>>980 お前も下らない書き込みする前になんか使ってみろ
おれはこれからHaskellがどんなもんかやってみる。
それは仕方なかろう。
新スレにそのまま議論を持ちこめなさそうだし。
それにそんな長い内容ではないし、
いくつかレスできる分が空いてたのでここでいいかなと。
>>983 俺は病み上がりなんだよ。
書込みできなかったから今やってるんだよ。
>>979 困らないからいいじゃんなどと言う議論には意味がない。
というより、有害ですらある。
それは、今のプログラミングスタイルでも困らないから
OOはいらないといっている連中と同様の論法にたつものだ。
ソフトウェア工学であれ計算機科学であれ、
少しでもよいもの、望ましいものを目指すべきであり、
そのような延長線の中に関数型なりOOなりは位置付けられるべきだ。
その意味でもお前は明らかに馬鹿だ。
そんなこたぁない
目の前の仕事を片付けるだけのものが好きなら
それ、つかってりゃいいじゃん。なんでこんなところに
くるんだよw。
そんなこたぁない
くさかべみたいなやつは逝ってくれ
>>992 なんで、よりによってHello Worldのページを選んだの?
いや、なんとなく。。
プログラミングはhelloworldからだし。。
ところで、
英語で書かれたよいチュートリアル知りませんか?
>>993 今hello worldコンパイルしてみたけど、
結構時間かかるんだね。ghcのversionは5.02。
>>996 勉強にはそっちの方がよかったかもね。
ちと、カコつけてしまった。こんな大きな
ものはどうせ使いこなせないだろうし。。
という訳で#apt-get install hugs開始w
hugsは軽くて勉強にはいいかも。
という訳でこのスレも終わりになりそうなので、
続きはHaskellスレにて質問させてください。
どうもありがとう。
Haskell萬歳ヽ(´ー`)ノ
Haskellマンセーヽ(`Д´)ノ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。