1 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 06:35:55.71 ] 一般的には、オブジェクト指向型言語が優勢でが 一部には関数型言語を崇拝している人もいます どちらが上なのか、この際はっきりさせましょう
2 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 06:37:20.10 ] このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
3 名前:デフォルトの名無しさん [2012/03/10(土) 06:51:21.07 ] 皆さん、試しに首を90度傾けてみて下さい。 今まであったはずの上と下 なんと! 右と左になってしまったではありませんか これが、21世紀最大の偉大なる発見です。 上へ上へと鎬を削る時代は終わりました。 これからは、自由自在に方向を変えてみようじゃありませんか。
4 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 06:53:37.62 ] オブジェクト指向型言語の圧勝だろ 関数型とか誰が使ってるんだよ
5 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 07:32:24.63 ] 鎬(しのぎ)
6 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 08:37:40.59 ] OCaml使え、で終了
7 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 08:41:56.52 ] いずれにしろ関数型言語とオブジェクト指向言語の特徴を併せ持つC#が最強って事。
8 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 08:52:00.24 ] じゃあC#とC#戦わせたらどっちが勝つん?
9 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 08:52:48.74 ] F#とC#
10 名前:デフォルトの名無しさん [2012/03/10(土) 09:32:00.04 ] ちゃんと将来のコンピューターでも対応してくれるほうが勝つわ!!
11 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:19:34.55 ] オブジェクト指向言語 ・・・ 実用言語 関数型言語 ・・・ 学習用言語
12 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:21:33.68 ] オブジェクト指向言語・・・ドカタ用 関数型言語・・・馬鹿には無理
13 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:30:31.33 ] あちゃw またドカタってうるさいやつが 来たかw
14 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:32:07.80 ] 実際関数型のほうが適している場面ってどんなときなの?
15 名前:デフォルトの名無しさん [2012/03/10(土) 11:52:25.31 ] >>1 不毛。削除依頼出しとけよ
16 名前:デフォルトの名無しさん [2012/03/10(土) 11:55:38.30 ] >>15 ボロ負け確実の関数型言語厨必死だなwww
17 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 11:58:15.23 ] >14 入社試験でバカをふり落とすとき。たとえ入ってから使うのがオブジェクト指向のみであっても。
18 名前:デフォルトの名無しさん mailto:15 [2012/03/10(土) 12:30:46.46 ] >>16 はい?オブジェクト指向言語しか使わないけど
19 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 13:14:27.41 ] >>1 目クソ鼻クソを嗤うの類だな
20 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 13:18:43.95 ] >>14 一度組んだらその後変更が無いシステムで 絶対にバグを出したくないとき じゃないかな
21 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 13:35:04.93 ] >>20 それ、仕様言語とかの方じゃないか?
22 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 15:08:53.79 ] どっちか選べるなら優劣を比較する意味もあるけどさ ドカタはOOPしか使えないだろ?関数型言語でまともにコード書けないだろ? だったら悩む必要ないじゃん
23 名前:デフォルトの名無しさん [2012/03/10(土) 15:10:29.86 ] 関数型言語信者って、差別主義者が多いようだね 根拠もなく優越感だけ持ってる
24 名前:デフォルトの名無しさん [2012/03/10(土) 15:21:50.67 ] Common Lispなら手続き型も関数型も出来るから最強じゃん CLOSでオブジェクト指向もサポートしてるから最強じゃん そもそも、CLOS無しでもオブジェクト指向っぽく書けるから最強じゃん
25 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 15:57:23.09 ] staticおじさんと似たような発想だよなぁ
26 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 16:35:37.80 ] 関数型で人のコード読ませられるのはたまらんな。
27 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 16:52:31.89 ] それは、バッカスの言うところの「一時に1語」のスタイルに頭が慣れてるから。 関数型に慣れたら副作用を考えなくていいのですごく楽なのに。
28 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 18:36:06.04 ] 物覚えの悪いCPUと、思考力の無いメモリとが一言ずつ喋りあいながらやってる、ってやつだっけ? メモリスタとかで状況が変わるかもな。
29 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 19:35:35.17 ] 本当にオブジェクト指向言語と言い切れるのはどんな言語?
30 名前:15 [2012/03/10(土) 20:00:01.75 ] なんて不毛なんだろう。。
31 名前:デフォルトの名無しさん mailto:hage [2012/03/10(土) 21:01:46.80 ] すまないがハゲ以外は帰ってくれないか?
32 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:57:57.82 ] >>27 > 関数型に慣れたら副作用を考えなくていいのですごく楽なのに。 副作用のないアプリはないんだよ。
33 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 00:01:44.37 ] これを思い出した news.mynavi.jp/news/2012/03/06/060/
34 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 00:04:15.08 ] ビタミンEの限度を超えた摂取は骨粗鬆症を招く可能性あり -慶応大らが解明
35 名前:デフォルトの名無しさん [2012/03/11(日) 01:07:03.97 ] 関数型言語とオブジェクト指向言語があわさって最強になってる言語ってないの?
36 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 01:12:14.53 ] F#とか?
37 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 01:31:35.12 ] Scalaだろうな。 関数型言語 + オブジェクト指向言語 + コンパイラ言語 これでネイティブコードはいて どのマシンでも動けば完璧なんだが。
38 名前:デフォルトの名無しさん mailto:hage [2012/03/11(日) 02:20:40.96 ] D
39 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 03:55:44.89 ] foldl _ v [] = v foldl f v (x:xs) = foldl f (f v x) xs sum = foldl (+) 0 product = foldl (*) 1 reverse = foldl (\ys x -> x:ys) [] length = foldl (\n _ -> n + 1) 0 再利用出来すぎ LLだって、オブジェクト指向の機能のみではここまで再利用は出来まい
40 名前:デフォルトの名無しさん [2012/03/11(日) 04:38:51.18 ] >>35 プログラム意味論あたりの研究で 関数型とオブジェクト指向は完璧には組み合わせられないって いう結論が出ているらしい
41 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 08:10:12.86 ] >>32 「考えなくていい」というレトリックがわかってないね。 参照透明性を壊すような副作用がないから、「考えなくていい」ということ。
42 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 08:20:12.84 ] >>39 Rubyなら再利用できますけど、何か? def fold(init, xs, &fn) case xs.length when 0 init when 1 fn.call(init, xs[0], &fn) else result = fn.call(init, xs[0]) for x in xs[1..(xs.length - 1)] result = fn.call(result, x, &fn) end result end end def sum(ary); fold(0, ary) { |s, x| s + x }; end def product(ary); fold(1, ary) { |p, x| p * x }; end def reverse(ary); fold([], ary) { |xs, x| xs.unshift(x) }; end def length(ary); fold(0, ary) { |n, _| n + 1 }; end
43 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 08:33:01.34 ] >>42 なるほど。Rubyで書き直すとクソコードになるって事ですね。
44 名前:42 mailto:sage [2012/03/11(日) 08:35:50.94 ] メソッドfoldの定義が冗長だったので、>>42 を訂正する def fold(init, xs, &fn) if xs.empty? init else result = fn.call(init, xs[0]) for x in xs[1..(xs.length - 1)] result = fn.call(result, x, &fn) end result end end def sum(ary); fold(0, ary) { |s, x| s + x }; end def product(ary); fold(1, ary) { |p, x| p * x }; end def reverse(ary); fold([], ary) { |xs, x| xs.unshift(x) }; end def length(ary); fold(0, ary) { |n, _| n + 1 }; end
45 名前:42 mailto:sage [2012/03/11(日) 08:40:16.04 ] >>44 のメソッドfoldの定義を更に簡潔にしてみた def fold(init, xs, &fn); xs.inject(init, &fn); end def sum(ary); fold(0, ary) { |xs, x| xs + x }; end def product(ary); fold(1, ary) { |xs, x| xs * x }; end def reverse(ary); fold([], ary) { |xs, x| xs.unshift(x) }; end def length(ary); fold(0, ary) { |xs, _| xs + 1 }; end
46 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 08:46:41.19 ] >>45 簡潔というか、foldの実装をinjectに押し込めただけだよね foldとinjectは機能的に殆ど同じだから
47 名前:42 mailto:sage [2012/03/11(日) 08:58:52.21 ] >>46 そのとおりだね ただし、>>44 ,45のコードは、>>39 の >LLだって、オブジェクト指向の機能のみではここまで再利用は出来まい という「関数(メソッド)の再利用性」に対する具体的な反論になっているんじゃないかな?
48 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:10:19.80 ] 引数2個程度のメソッドの再利用で再利用性が高いとか言っちゃうのもどうかね。 オブジェクト指向の再利用で典型的なのはGUIコンポーネントなどで、 複数の入力に対して複雑な出力があるものだから比較になってない。
49 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:16:51.59 ] 上位クラスに小さなバグがあっても 継承したクラスで関連するメソッドをオーバーライドして修正できるのも再利用性なんだよな。 バグがあるのが悪いというのは論外で、他人が作った資産だったり、すでにオブジェクトファイルに固めてあったり色々な事情がある。
50 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:23:57.03 ] あとね、いくら簡潔に書けてもドカタに理解できないコードは再利用性が低いと言えるんだ。
51 名前:デフォルトの名無しさん [2012/03/11(日) 09:26:34.85 ] ドカタ、ドカタと言っている人何者なの? 建設的な議論を妨げてるような気がするんだけど
52 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:31:15.63 ] ドカタが気に障ったのかな? じゃあ言い方を変えて猿でもわかるコードならば再利用性があると言える。
53 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:35:44.85 ] ほとんどのオブジェクト指向言語のカプセル化は、猿でも簡単に壊せるよね。 たとえばHaskellのIOモナドみたいな堅牢性はどこにもない。
54 名前:デフォルトの名無しさん [2012/03/11(日) 09:35:51.79 ] ああ、単なる馬鹿か
55 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:38:11.13 ] どんな堅牢でも外部プロセスからメモリ書き換えればなんでも壊せる
56 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:40:38.94 ] IOモナドがどう堅牢なのかご高説を賜りたいものです。
57 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:42:17.16 ] 関数型言語を全く知らずにスレを立てる程のバカであることが判明しましたw
58 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 09:48:13.58 ] たとえば Int -> Int 型の関数の中から unsafePerformIO を使わずに、 "Hello World" って出力しようとしてみればわかるけど、 それすら知らない程の超弩級のバカですねw
59 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:05:07.74 ] なんか誰に対して何を言っているのか良くわかんないけど、 Haskell信者が傲慢で独り善がりな事だけはわかった。
60 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:10:26.72 ] > どんな堅牢でも外部プロセスからメモリ書き換えればなんでも壊せる 傲慢で独り善がりってこういう主張のことを言うんですよw
61 名前:デフォルトの名無しさん [2012/03/11(日) 10:10:28.70 ] Haskellは神 Haskellerは神の使徒 ML厨やLisp厨は異端 煉獄の火の中に投げ入れられるべき 命令形言語厨は異教徒 豚畜生と変わらない
62 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:16:06.45 ] で、具体的な反論は?
63 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:24:33.25 ] >>47 ブロックは確かにSmalltalkでもオブジェクトとして有るんだけど、一般的なオブジェクト指向言語には無いのがなぁ・・・ 結局、再利用性を高めるためには継承・隠蔽・多態性よりも、関数を値として渡すという関数型言語的な処理の方が有用なんじゃなかろうか 実際、C++やJavaで再利用性に欠かせないテンプレート(ジェネリック)は、オブジェクト指向とは無関係で、どちらかと言うと関数型言語の型推論に近い(これも関数型言語とは無関係と言われればそれまでだが) そう考えると、型推論的なものと、関数を値として扱える機能が、再利用性向上に寄与してるとも言える オブジェクト指向の多態性に当たるオーバーライド、オーバーロードはテンプレート(ジェネリック)を使ってなるべく利用しない方向に向かってるのが何よりの証拠とは言えないだろうか そう考えると、型を意識するオブジェクト指向と関数型のそれぞれの言語を持ち出した方が、より生産性に有用な機能がどれかを浮き彫りにしてくれそうな気がする
64 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:34:03.01 ] >オブジェクト指向の多態性に当たるオーバーライド、オーバーロードはテンプレート(ジェネリック)を使ってなるべく利用しない方向に向かってるのが何よりの証拠とは言えないだろうか 全く意味がわからない。 (バカだからわかんねーんだよwwっていうのはHaskell信者だけにしてほしい)
65 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:35:23.79 ] いや、ブロックというかクロージャでいいだろうし、メソッドを呼び出せるオブジェクトはクロージャとして 使えるから、そのありなしはほとんどどうでもいいと思う。
66 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:35:44.57 ] >>64 おまえが無知なだけ。
67 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 10:38:28.06 ] >>66 なんだよ。俺が無知だったらお前は無知以下じゃないか。
68 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:21:24.02 ] >>64 嫌マジ Haskell信者じゃなくても、馬鹿だから分からねーんだよって言われて良いレベル Javaに最初ジェネリックが無かったのに、何で入ったか考えてみ? 継承はともかく、今や、多態性はオブジェクト指向の機能は補助的なものに過ぎない 多態性指向と言うか、テンプレートやジェネリックは別のプラットフォームのものと考えるべきものだろう 関数型とも違うプラットフォームとも言える。と言うか、オブジェクト指向も、関数型も、元は型が無い前提だったんじゃないかと思える 実行速度、安全性などの理由で型も意識した結果がテンプレート(ジェネリック)や型推論に落ち着いたと想像してる
69 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:34:25.84 ] 型でガチガチにすれば安全になるのはわかっている。これはなんでもそう。 (型なしラムダ計算があったりするように、どちらにも型なしの世界はある) 安全になることはわかってるけど、 ・いちいち型を書くと、無駄に冗長 ・配列とかリストとかのコレクションとか、ガチガチをあえて緩めるか 組み合わせの数だけ(整数の配列、浮動小数点のリスト、…)型が必要 という問題があるから、それをエレガントに解決するために使われるのが、 型推論やジェネリック型(や型クラス)。
70 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:37:37.24 ] >オブジェクト指向の多態性に当たるオーバーライド、オーバーロードはテンプレート(ジェネリック)を使ってなるべく利用しない方向に向かってるのが何よりの証拠とは言えないだろうか 相変わらずこれの意味がわからない。 オーバーロードを多態性だってのはわかるけどオーバーライドが多態性かっていうと?だし テンプレートやジェネリクスでオーバーライド、オーバーロードが制限されることもないし 利用しないようになっているというのもわからないし。 それが何よりの証拠になる理屈もわからない。
71 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:55:05.57 ] 型による安全性という概念を知らない、ないしわからない、ということはわかった。
72 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:01:26.09 ] >>71 なんだよ〜C++がテンプレートを取り入れた当初から バリバリつかってた俺は経験的によーく知っているつもりだけどな。 なんか見下す事しか出来ない奴らだなおまえらって。
73 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:13:16.42 ] >>69 そうそう! それが俺の言いたかった事!
74 名前:42 mailto:sage [2012/03/11(日) 12:22:10.21 ] >>63 >オブジェクト指向の多態性に当たるオーバーライド、 >オーバーロードはテンプレート(ジェネリック)を使ってなるべく利用しない方向に >向かってるのが何よりの証拠とは言えないだろうか >>64 ,70ではないがw、自分も何を言いたいのか分からない 動的型付けなオブジェクト指向言語であるSmalltalk/Rubyでは「(>>63 の)都合が悪い」から 話を静的型付けな言語(C++/Java)へ持って行きたい、というのなら分かるのだけれど..... Lisp/Scheme/Logoのように動的型付けな関数型言語も存在しているわけで、 型付け(動的と静的)と計算モデル(命令型と適用型)をゴッチャにして 理解したつもりになっていまいか?
75 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:24:14.70 ] >>69 >それをエレガントに解決するために使われるのが、 >型推論やジェネリック型(や型クラス)。 C++やJavaのジェネリック型が、エレガントにはとうてい見えない件について.....
76 名前:70 mailto:sage [2012/03/11(日) 12:35:27.17 ] すまん俺も少しおかしな事を言っていた、 オブジェクト指向においてオーバーライドは多態性そのものだな。 あの一行を除けば>>63 の言いいたい事は解るよ。
77 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:41:29.15 ] >>74 > Lisp/Scheme/Logoのように動的型付けな関数型言語も存在しているわけで、 > 型付け(動的と静的)と計算モデル(命令型と適用型)をゴッチャにして > 理解したつもりになっていまいか? 計算モデルで分類するならLisp/Scheme/Logoは命令型ですよ
78 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:48:19.28 ] 関数型言語の一般的な定義からすればLisp/Scheme/Logoも関数型言語だろ 一般的な定義は「関数がファーストオブジェクトである」
79 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:51:15.21 ] さいしょのオブジェクト?
80 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 13:07:48.26 ] > 一般的な定義は「関数がファーストオブジェクトである」 ファーストオブジェクトって何? ファーストクラスオブジェクト、ってことなら、PythonとかJavaScriptとか、 最近の言語がみんな関数型言語になっちゃいますけど。 C言語は関数型言語、に類似のデマに惑わされてる人でしょあなたも。 >>75 C++はジェネリックというよりテンプレだから。Javaと一緒にすんな。
81 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 13:33:55.54 ] よしこれからは依存型のある言語だけを関数型言語と呼ぼう
82 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 13:54:53.49 ] LLバトスレからコピペ 82 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/03/09(金) 12:07:14.32 実用期を迎えた関数プログラミング 参加レポート ttp://sea.jp/?p=937 > つまり、関数プログラミングを快適に実践するには、関数を変数に格納できるという程度では不十分だということです。 > 関数プログラミングを支援する言語機能として、以下のようなものが紹介されました。 > > ・関数を変数に格納でき、さらに無名でも定義できること > ・関数内部が静的なスコープを持つこと > ・関数の引数の一部だけを変数にバインドした別関数を返す部分適用を簡単に利n用できること > ・変数は上書きしない。配列、リストの中身も書き換えない > > これらの機能は、関数を頻繁に定義し、それをいろいろな場所に渡して使用する以上ないと困るし、 > 変数が上書きされたり副作用があると関数を組み合わせて使用することが難しくなるのだろう、と私は理解しました。 > > 個々の要素、例えば高階関数や部分適用などのみに注目して他言語、JavaScriptやRubyなどを見ていけば、 > これらの機能を備えた命令型言語はたくさんあると思います。 > > 実際、関数を使ったプログラミングもできると思うのですが、やはり型や変数の取り扱い、 > 副作用をどのように扱うか、スコープや値の評価方法など、関数型言語としてデザインされた言語でなければ、 > 関数プログラマーの方々がおっしゃるレベルの関数プログラミングは実現できないのだろうと感じました。
83 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:20:39.31 ] >>82 高階関数、モジュール指向、ラムダ関数、論理型ってこと? モジュール指向は当たり前だし論理型は余計な感じもする。
84 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:41:52.30 ] 手段と目的が逆になってる。 関数型言語を使うことが目的になってる。
85 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:43:04.94 ] 関数型言語の本質 = オブジェクト指向と混ぜた時に 絶対実現不可能なこと。
86 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:49:18.00 ] >>85 絶対って言葉をあんま使わん方がいいぞ。 関数型の典型であるLispのオブジェクト指向 www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/objectOrientedLisp.html
87 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:53:48.47 ] >>86 プログラム意味論あたりの研究で 関数型とオブジェクト指向は完璧には組み合わせられないって いう結論が出ている
88 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 14:57:13.55 ] >>87 証明は?で君はそれを理解しているの?受け売りはいかんよ。
89 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:13:16.22 ] >>86 最近の関数型言語信者はLispは関数型言語じゃないとか言ってるよ WEB+DBマガジンに関数型言語についての記事があるけど Lispを関数型言語から排除していた
90 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:15:07.46 ] 関数型言語は処理のリストを簡単に作る事ができる。 [処理,処理,処理,処理] オブジェクト指向言語はこれを実現できないわけじゃない Operationクラスを作ってoperationメソッドを作って Operationを継承するクラスを各処理ごとに作ってoperationメソッドをオーバーライドして それらをOperationリストに突っ込めばいい。 高階関数もFactoryやリフレクションを駆使してムリクリ作る事はできる。 でも高階関数モドキやラムダ式モドキをわざわざ作らない。あまり必要ないから。
91 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:25:31.37 ] ああ確かに不毛だなこのスレ
92 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:52:23.26 ] 関数型っていうのは副作用を許さないから、 どうしても関数型の理論だけで完結することはできない。 だからどの関数型言語も、関数型理論とは外れる機能を搭載している。 世の中に必要とされているシステムってのは絶対に副作用が必要だから、 関数型とそれ以外(たいていはオブジェクト指向)を混ぜた言語が使われる。 昔は、関数型にそれ以外を追加した、関数型ベースの言語が使われていたが 最近はオブジェクト指向に、関数型の機能を追加した、 オブジェクト指向ベースの言語が使われてきている。 また旧来の言語も、関数型の理論を取り入れてきている。 もう、それでいいんじゃね? 関数型ベースなんてもう流行らないよ。
93 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:00:04.51 ] 昔:馬鹿はプログラミングしなかった(だから関数型ベースで問題なかった) 今;馬鹿もプログラミングするようになった
94 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:02:45.17 ] オブジェクト指向は流行らないよ、と必死にわめいていたバカにそっくりだーw
95 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:09:45.05 ] >>89 添削 X: 最近の関数型言語信者はLispは関数型言語じゃないとか言ってるよ O: Haskell信者はLispは関数型言語じゃないとか言ってるよ >WEB+DBマガジンに関数型言語についての記事があるけどLispを関数型言語から排除していた それは静的型付けな関数型言語に関する記事だからという理由じゃないのかな その記事で「Lispは関数型言語じゃない」と書いてあるの? 参考として「やっぱり動的型付け言語は大規模開発で効率が悪い 2」スレ(dat落ち)からコピペ 366 名前: デフォルトの名無しさん Mail: sage 投稿日: 2011/10/26(水) 12:25:43.06 >>365 それはハスケラ特有の症例で、心の病の一つ ハスケルという言語を使っていると、世の中のあらゆる事柄すべてが ハスケルを中心に廻っているように見えるらしい 従って、あらゆる関数型言語は静的実行かつ静的型付けでなければならないし、 遅延評価が常識であり、一切の副作用は認めようとしない ハスケラにとって関数型言語とはハスケルのことであり、 その窓から見える世界が彼らのすべて
96 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:14:01.51 ] こういうスレタイにすべきだったな Haskell VS その他の関数型言語 VS オブジェクト指向言語 Haskeller VS その他の言語使用者
97 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:20:11.49 ] >>1 がそもそも関数型言語について全くわかってなかったんだからしょうがない
98 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:55:49.58 ] 実際HaskellとLispは SmalltalkとJavaくらい違う
99 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:11:29.17 ] Haskellってなんていうか、 人を誑かすのは上手いよね。
100 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:14:32.45 ] 正直、副作用問題を放棄してる関数型言語と、最近のLLの機能的な境目が薄くなって来てる感じはする RubyもPythonもオブジェクト指向言語と言うより、マルチプラットフォーム言語なんじゃないかと 何というか、ちゃんと切り分けていこうぜ オブジェクト指向の機能と、関数型言語の機能 それらに依存しない機能
101 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:23:59.76 ] マルチプラットフォームっていうとWindows,Linux,Macで動くように聞こえる。
102 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:26:09.19 ] マルチパラダイムって言いたかったんと違うん?
103 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:47:22.31 ] >>102 補足ありがと・・・・ それが言いたかった
104 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 21:17:02.05 ] >>39 関数型言語の出す例ってその手の toy ばっか。 reverse や length なんていうデフォで提供されてて当たり前な関数を わざわざ fold から自作してみせて再利用性(キリ アホかと 再利用唱えてドヤ顔するなら GoF の例を関数型言語で書き下して コード一桁減りましたくらい言えって
105 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 21:56:07.61 ] 現在の関数型言語に足りないモノ、それは大規模開発に対応できる開発方法論が存在しない点 Haskellerご自慢のモナド/アローはプログラミング(コード設計)レベルの手法であり、 オブジェクト指向言語であればSmalltalk-80が世に知られ始めた1990年代に近い状況 現在のオブジェクト指向言語と比較すれば、関数型言語は少なくとも10年以上の遅れがある 関数型言語には、アート(工芸)やテクニック(技法)からエンジニアリング(工学)への脱皮が必要だろう 参考として「関数型言語Part5」からコピペ 351 名前: 283 Mail: sage 投稿日: 2011/10/01(土) 01:25:14.63 >>347 >という別の切り口の提案についてはどう思ってるの? まず関数型言語に適したソフトウェア開発方法論というものが、 あれこれ分類を検討できるほど存在していない、という事柄があります。 もちろん>>345 の教科書を含めて「数学的な活動としての関数型プログラミング」や、 形式的手法あるいは定理証明といった分野で活発な研究が行われているのは知っています。 ただし自分が求めているのは、現場に提案/適用できる実用的なソフトウェア設計論です。 たとえばOOPLであれば1992年に国内出版された「オブジェクト指向方法論OMT」があります。 当時はOOに対して悲観的な意見者が大半を占めていた時代でしたが、 この本の登場によって、国内でも一気にOOP/OODに関する注目が高まりました。 そして1995年の「デザインパターン」による設計手法のカタログ化(分類)によって一気に普及しました。 これに相当するような具体的な設計論が関数型言語に存在しますか?おそらく現状は No でしょう。 以上のように考えて、>>315 で提案されたようなトップダウンな方法論は(今の自分には)無理だと判断しました。
106 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:33:08.81 ] >>105 の言うエンジニアリングって、要するにM蔵とかいう会社あたりで あれこれバズワードを振り付けてそれっぽく見せてくれればおk、ってこと? 新技術にあれこれ難癖つけているだけの奴って、結局出遅れて損をして、 後からは損をした損をした、って喚くだけに奴になるよね、たいていw
107 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:39:36.88 ] >>106 なんでちゃんと詳細なこと書いてあるのに読まないの? たとえば、Observer パターンを関数型言語ならどう実装するかってことだよ。
108 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 01:36:29.25 ] インターフェイスクラスを継承しないで何かを開発するなど悪夢だろう。 Cでもできるが保守の手間が尋常じゃなくなるからC++にしておくんだ。
109 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 01:39:39.17 ] ※注意 ここは突っ込むところです。はい、どうぞ。
110 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 07:12:19.93 ] JavaにはgotoがないからJavaは使えない、みたいな議論だな。 オブジェクト指向で必要となるデザインパターンが実現できないから関数型は使えない、と言われても、というか。
111 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 08:24:35.46 ] >>110 やっぱりそのレスが来ると思ったw デザインパターンというのは、問題があって その問題をオブジェクト指向で解決する場合のやり方。 解決のやり方がオブジェクト指向というだけで ここで発生した問題は関数型でも発生する。 Observerパターンでいえば、 何かの状態の変化を監視したいという問題。 それを関数型言語で解決してみろ。
112 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 08:52:56.35 ] 純粋関数型言語で、なのか、なんでもかんでも関数型の関数型言語か、 はたしてどっちのことを言っているのだろう?
113 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 08:55:42.78 ] とりあえずMonadStateとMonadIOのインスタンスにしときゃあいいんだよ!!
114 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 23:05:14.54 ] Haskellはバカが得意げになるための道具、まで読んだ
115 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 07:34:17.93 ] このスレは↑のようなバカが得意げになるためのスレです
116 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 13:49:34.45 ] Haskell は「けいざいがく」と同じにおいがする 現実から目をそらし、夢の世界の幸福に浸る
117 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 15:28:07.46 ] >>111 関数型言語ではFRPで解決します。 やさしいFunctional reactive programming(概要編) - maoeのブログ d.hatena.ne.jp/maoe/20100109/1263059731
118 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 15:43:23.40 ] うむ、リアクティブぷるぐらみんぐは気になる。 でもそのためにわざわざ関数型に切り替えるとなると、う〜む
119 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:01:38.10 ] オブしこのほうが自然だよね。
120 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 01:12:30.99 ] リアクティブとかこの世の地獄が生まれそうな機能だなおい。 逐次処理否定してなんかいいことあんのかよ。プッシュプルみたいなもんなのか?
121 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 08:53:59.21 ] 否定してないからIOモナドがあるんだろうが。