関数型言語

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:01/12/02 23:20
>>949
C言語の前置/後置インクリメントなんかは
「副作用」という概念丸出しですが?
>>952
すべて意図通り
954デフォルトの名無しさん:01/12/03 00:31
?
>>951
逆じゃないよ。C#のデリゲートなんて、メソッド
をデータとして扱う典型例じゃん。
956858:01/12/03 05:01
>>951,955
非常に微妙な問題だが、私の解釈では少し違う。
まず、純粋なオブジェクト指向では、メソッドもデータも単独で存在する事はあり得ない。
 (define オブジェクト '(識別子 データ メソッド))
という感じになるが、この中のデータもまたオブジェクトになっている。
(こういう定義は、難しいねぇ。
 再帰は再帰によって定義されるからね。)

データとメソッドをいっしょにしたオブジェクトを扱うのが、OOで
データとメソッドを区別しつつ扱いが同等なのが、関数型。
逆とも言えないが、同じとも言えない。
微妙な関係だ…。

あと、C#のデリゲートはCで言うところの関数ポインタにあたるが、
主にイベント処理を扱うために考案されているので、
そのメソッドだけを取り出して、どうこうするのはC#らしくないかもしれない。
また、これはデザパタで言うところの、マルチキャストパターンにあたる。
http://objectclub.esm.co.jp/evolutionalDesignWithPatterns/index.html
あほくさ。例えばCLOSでOOが出来る。
それで十分だろ。
実用とかけ離れた抽象的議論はくだらねぇよ。
958.:01/12/03 09:14
CLOSは実用的ですか
>>955,956
- ある意味 - OOと逆。

一応ちゃんと読んでくれよな。
>>959
ある意味ってどういう意味だ?
それは意味のある議論なのか?
>>960
俺としては、お前がちゃんと読んだ上で
回答してくれればそれで良い。
今後は気をつけるように。
963960:01/12/03 13:42
>>962
誰かと人違いしないでくれ。
意味がわから無いかつ説明しないことなら書き込むなよ。
最近このスレでそうやって関数型言語を無理やり批判する人物を見かけるが、
全部同一人物か?
964デフォルトの名無しさん:01/12/03 13:46
えらそうにしてるけど,>>951は「ある意味」などと曖昧なことを書いて
技術的な議論する気はないわけだね.「メソッドとデータの区別をなくす」
という表現も意味不明.
965縞栗鼠(シマリス)の親方:01/12/03 13:48
中央高等学院の従業員「西部」が女子トイレに闖入し
汚物入れを物色して女子生徒の使用済みタンポン・ナプキン等を
個人的に収集しているというのは事実。
中央高等学院 http://chs-f.com/index.html 中央高等学院福岡校
http://www.chuo-school.ac/
966デフォルトの名無しさん:01/12/03 13:55
909とか948で関数型に関する主張がなされており、
それについて色々批判があったので、
他に考えられる関数型の特徴と言えば、
関数を他の関数の引数として使用できる、
つまり、それこそある意味関数が「値」でもあることなのでは
なかろうかと考えレスをしてみた。

>>964
>「メソッドとデータの区別をなくす」
>という表現も意味不明.

むしろえらそうなのはお前。
どの点が意味不明なんですか?
967960:01/12/03 13:58
>>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
次スレ
関数型言語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などを例示とすべきだ。
その手の議論は言語的な広がりがなくなる。
982メーテル:01/12/09 00:54
ここは旧スレ。
人は、旧スレになってから粋がる奴を厨房と呼ぶわ。
ghc5入れようとしたらかなりでかくて萎えた。

>>980
お前も下らない書き込みする前になんか使ってみろ
おれはこれからHaskellがどんなもんかやってみる。
それは仕方なかろう。
新スレにそのまま議論を持ちこめなさそうだし。
それにそんな長い内容ではないし、
いくつかレスできる分が空いてたのでここでいいかなと。
>>983
俺は病み上がりなんだよ。
書込みできなかったから今やってるんだよ。
>>985
病み上がりならマターリしてろよ(ワラ
>>979
困らないからいいじゃんなどと言う議論には意味がない。
というより、有害ですらある。
それは、今のプログラミングスタイルでも困らないから
OOはいらないといっている連中と同様の論法にたつものだ。
ソフトウェア工学であれ計算機科学であれ、
少しでもよいもの、望ましいものを目指すべきであり、
そのような延長線の中に関数型なりOOなりは位置付けられるべきだ。
その意味でもお前は明らかに馬鹿だ。
そんなこたぁない
目の前の仕事を片付けるだけのものが好きなら
それ、つかってりゃいいじゃん。なんでこんなところに
くるんだよw。
そんなこたぁない
991仕様書無しさん:01/12/09 01:49
くさかべみたいなやつは逝ってくれ
http://www.bagley.org/~doug/shootout/bench/hello/
こんなのみるとパフォーマンスは悪くないようだ。
>>992
なんで、よりによってHello Worldのページを選んだの?
いや、なんとなく。。
プログラミングはhelloworldからだし。。

ところで、
英語で書かれたよいチュートリアル知りませんか?
>>993
今hello worldコンパイルしてみたけど、
結構時間かかるんだね。ghcのversionは5.02。
>>995
素直にHugs使ったら?
>>996
勉強にはそっちの方がよかったかもね。
ちと、カコつけてしまった。こんな大きな
ものはどうせ使いこなせないだろうし。。

という訳で#apt-get install hugs開始w
hugsは軽くて勉強にはいいかも。

という訳でこのスレも終わりになりそうなので、
続きはHaskellスレにて質問させてください。
どうもありがとう。
Haskell萬歳ヽ(´ー`)ノ
10001000:01/12/09 03:03
Haskellマンセーヽ(`Д´)ノ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。