【アンチ】関数型言語は使えない【玩具】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/11/08(火) 18:06:57.51玩具として、研究者や学生の自己満足として、
教科書や黒板を賑わすアクセサリーとして、
あるいは頭の体操としての価値は認める。
だが、仕事ではほとんど使い物にならない。
やれば作れる、実際に作った、そんな言い分は聞き飽きた。
主要なソフトウェアのほとんどは非関数型で書かれている。
関数型がプチブームだが、爆発的に採用が増えているとも考えられない。
いずれ関数型のブームは去るだろう。
仮に関数型が生き残ることがあったとしても、
手続的な言語における一部の機能としてだろう。
0153デフォルトの名無しさん
2011/11/17(木) 23:43:34.950154デフォルトの名無しさん
2011/11/17(木) 23:49:37.01DB構築なんかも初めてのパッケージだとか言いながら、ネットで(勿論英語サイトを)調べながらちゃっちゃと組んでたw
0155デフォルトの名無しさん
2011/11/17(木) 23:58:14.99複数のプログラミング言語を使った後に読んだが、計算モデルの意味が解って、その言語に適したコーティングをやり易くなった。
0156デフォルトの名無しさん
2011/11/18(金) 00:13:05.80なるほど、僕も複数の言語使ってるけど、参考になります。その言語
言語で適した書き方あるもんね。
0157デフォルトの名無しさん
2011/11/18(金) 04:11:37.15スイスの海軍並に役に立つな。
0158デフォルトの名無しさん
2011/11/18(金) 08:59:35.09つ Oz
0159デフォルトの名無しさん
2011/11/18(金) 09:12:59.88適した書き方、もあるが
解決したい問題→どの問題領域か?→どの計算モデルが適しているか?→どの言語が適しているか?
の見極めが早くなるので、読んどいた方が後々楽。
勿論、「最適言語」にも幅があるので、効果/追加リソースが大きいのを選ぶことになる。
0160デフォルトの名無しさん
2011/11/18(金) 13:34:00.62プログラミングは問題解決型の領域だけじゃないぜ?
0161デフォルトの名無しさん
2011/11/18(金) 13:53:38.26世間の仕事の9割以上はそういった、単純な事務処理だから別に問題ではない。
その手の仕事だけやる分には、このスレに書きこむ必要もないだろう。
0162デフォルトの名無しさん
2011/11/18(金) 13:59:30.67一兵卒の意見だな
0163デフォルトの名無しさん
2011/11/18(金) 14:33:56.69問題解決領域を見極めた方法がわかりやすい本だよ
といえば、
問題解決のパラダイムに囚われた考え方。そんなんだけじゃないぜ?
と
どの問題でも大差なく扱える問題は自分でなれた言語でやれば良い話。
>>159のサジェスチョンを全く理解してないってことだと思う。
0164デフォルトの名無しさん
2011/11/18(金) 17:49:54.58問題解決パラダイムに染まりきってるね。
問題解決以外はどの言語でも大して変わらんとか、分かりやすいドカタ思考だ。
0165デフォルトの名無しさん
2011/11/18(金) 18:06:24.27うーん。。。 この人って 問題解決パラダイムのこと書いてたら、
それしか頭にないと思う人だろうか?お気の毒な頭脳をお持ちなのね。
0166デフォルトの名無しさん
2011/11/18(金) 18:07:42.85>>159-161のながれを...
0167デフォルトの名無しさん
2011/11/18(金) 21:41:13.950168デフォルトの名無しさん
2011/11/18(金) 22:12:35.82一連の書き込みを、自分ともう一人だけがしてると思ってんじゃないかな?
0169デフォルトの名無しさん
2011/11/19(土) 04:49:42.630170デフォルトの名無しさん
2011/11/19(土) 10:48:46.88丁寧に書くと>>163は>>161,162の皮肉だって。 なんで流れを読まないんだろう。
0171デフォルトの名無しさん
2011/11/19(土) 10:50:37.86日本語お上手ですねw
0172デフォルトの名無しさん
2011/11/19(土) 12:35:11.07Rubyで書いてみたいな…けどHaskellわかんないんだ
JavaとPythonなら分かるんだけど、どんなコードだったの?
0173デフォルトの名無しさん
2011/11/19(土) 18:15:42.25C#にはnullとかいうのがあるらしい。
クソめんどうくさかった。
0174デフォルトの名無しさん
2011/11/19(土) 20:37:19.00public static List<Integer[]> pyths (int n) {
List<Integer[]> list = new ArrayList<Integer[]>();
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= n; y++) {
for (int z = 1; z <= n; z++) {
if (x * x + y * y == z * z) {
list.add(new Integer[] {x, y, z});
}
}
}
}
return list;
}
0175デフォルトの名無しさん
2011/11/19(土) 23:04:29.52pyths n = [(x,t,z) | x <- [1..n], y <- [1..n], z <- [1..n], x^2 + y^2 == z^2]
0176デフォルトの名無しさん
2011/11/20(日) 00:20:09.18yの代わりにtが混入してる。
0177172
2011/11/20(日) 02:00:52.12おk把握
def pyths(n)
(1..n).flat_map{|x|(1..n).flat_map{|y|(1..n).map{|z|[x,y,z]}}}.select{|x,y,z| x**2 + y**2 == z**2 }
end
こんなもんかなあ、Rubyだと。
0178デフォルトの名無しさん
2011/11/20(日) 02:54:00.73def pyths(n)
(1..n)
.to_a
.combination(3)
.select{|x,y,z|x*x+y*y==z*z}
end
0179172
2011/11/20(日) 02:59:41.990181デフォルトの名無しさん
2011/11/20(日) 19:48:27.46結局、何を求めるプログラムなわけ?
関数型言語って人が見て何をやってるのか分からない言語じゃないのか?
0182デフォルトの名無しさん
2011/11/20(日) 19:57:20.800183デフォルトの名無しさん
2011/11/20(日) 20:27:28.370184デフォルトの名無しさん
2011/11/20(日) 20:53:48.340185デフォルトの名無しさん
2011/11/20(日) 21:19:26.49それぞれの熟練プログラマが書いたら効率は
そんなに変わらなくね?
アセンブラとかなら変わるだろうけど
違うとしたら、178が何をやってるのか理解するのに勉強が
必要だというぐらいだろ
0186デフォルトの名無しさん
2011/11/20(日) 23:21:58.23> 関数型言語って人が見て何をやってるのか分からない言語じゃないのか?
それは手続き型言語
0187デフォルトの名無しさん
2011/11/21(月) 00:40:13.63関数は 資材を加工する機械に通してる感じ。
0188デフォルトの名無しさん
2011/11/21(月) 01:07:17.13関数型は未だにパッと見でわからないです。
0189デフォルトの名無しさん
2011/11/21(月) 01:08:58.40手続き型は積み重ね
0190デフォルトの名無しさん
2011/11/21(月) 02:42:58.91時間の流れは一方的、開いた系で現実的
関数型言語は量子力学
時間の流れは存在せず、閉じた系で理論的
0191デフォルトの名無しさん
2011/11/21(月) 03:23:52.64関数型は整理
0192デフォルトの名無しさん
2011/11/21(月) 07:42:39.76関数型は羅列
0193デフォルトの名無しさん
2011/11/21(月) 08:02:53.73元ネタが見つからないのでわからないのですが、int しか使わない縛りとかあったのでしょうか。
List<Integer[]> list = new ArrayList<Integer[]>();
for (int x = 1; x <= 100; x++)
for (int y = 1; y <= 100; y++) {
double z = Math.sqrt(x * x + y * y);
if (z <= 100 && (int) z == z) list.add(new Integer[] { x, y, (int) z });
}
0194デフォルトの名無しさん
2011/11/21(月) 08:26:01.80それ、間違い。浮動小数点数の扱いに慣れてない?
0195デフォルトの名無しさん
2011/11/21(月) 08:30:13.710196デフォルトの名無しさん
2011/11/21(月) 08:36:50.090197デフォルトの名無しさん
2011/11/21(月) 08:46:16.00Prologには既にブームの兆しがあるし、関数型の周辺に
猛烈な勢いで関心が拡がって、渉猟されてる感がある。
0198デフォルトの名無しさん
2011/11/21(月) 08:48:26.52Erlang人気は意外だった。
0200デフォルトの名無しさん
2011/11/21(月) 09:32:35.99理解するのに勉強が必要って…どれも必要だろう
0201デフォルトの名無しさん
2011/11/21(月) 10:25:56.50まんま、ピタゴラス数を求める関数でんがな
パッと見で分かってるじゃん
0202デフォルトの名無しさん
2011/11/22(火) 02:11:23.03当然関数型でも解りやすいのと解りにくいのがある。
Perlの変態コードだってパッと見わからんでしょ。
それに手続き型に何年親しんでから、関数型をどれくらいやったのか?
単なる慣れの要素もある
0203デフォルトの名無しさん
2011/11/22(火) 05:13:59.50その勉強量が違うだろ
多くの人が知らない概念を使ってる場合、
その多くの人は新たに勉強する必要がある
知ってる場合は勉強する必要はない
0204デフォルトの名無しさん
2011/11/22(火) 12:55:21.67関数型でわかりにくいというのはどこを指してるのか?
(reduce .. (filter .. (map .. (map ....
もなぁーど ...
基本は再帰を乗り越えなアカンっていうのはある。関数型で
バッドノウハウだと思ってるのは、末尾再帰くらいかも。
0205デフォルトの名無しさん
2011/11/22(火) 15:35:23.14カッコも再帰も最小限ですむよ
0206デフォルトの名無しさん
2011/11/22(火) 16:09:47.64ハスケルだったらね。ポイントフリーのほうが楽なこと多いよね。
あれで必要以上に複雑なことしなければ、誰だって使えるようになるでしょうよ。
0207デフォルトの名無しさん
2011/11/22(火) 17:12:14.500208デフォルトの名無しさん
2011/11/22(火) 19:41:54.440209デフォルトの名無しさん
2011/11/22(火) 20:10:56.4564ビットOSが普及すれば、スクリプトより楽な巻子型言語が普及・・・して欲しいなぁ…
関数型言語って、基本的に簡単だけど、要求スペックも無限のメモリ、無限のクロックなんだよね・・・
通常アプリでメモリやクロック、スレッドを気にしなくてよくなったら、普及すると思うんだ
0210デフォルトの名無しさん
2011/11/22(火) 20:11:45.59o関数
0211デフォルトの名無しさん
2011/11/22(火) 20:20:11.59それを解消するためのアルゴリズlムであり、末尾再帰なんだと思う
0212デフォルトの名無しさん
2011/11/22(火) 20:30:08.07現実を無視しちゃいかんよ
0213デフォルトの名無しさん
2011/11/22(火) 21:00:40.610214デフォルトの名無しさん
2011/11/22(火) 21:15:40.50人は手続型で思考する。
だから、先入観の無い子供でも
関数型は手続型より難しいと感じる。
S式や再帰を強調し、ほら簡単だろと言うから
関数型は嫌われてメジャーになれない。
0215デフォルトの名無しさん
2011/11/22(火) 21:37:40.15一方数学というのは思考を簡約できる道具なわけで
手続きに関数の表現を盛り込んでいくのがいいと思う
0216デフォルトの名無しさん
2011/11/22(火) 21:41:57.490217デフォルトの名無しさん
2011/11/22(火) 21:48:11.680218デフォルトの名無しさん
2011/11/22(火) 21:57:05.12中?高?で関数を教えたほうがいいかもしれん
0219デフォルトの名無しさん
2011/11/22(火) 21:59:19.130220デフォルトの名無しさん
2011/11/22(火) 23:01:53.480221デフォルトの名無しさん
2011/11/22(火) 23:09:42.98UMLで設計するんじゃなくて、DFDで設計したらいいんだよね?
0222デフォルトの名無しさん
2011/11/22(火) 23:23:19.230223デフォルトの名無しさん
2011/11/22(火) 23:30:49.75オフサイドルールの面も大きいと思う
0224デフォルトの名無しさん
2011/11/22(火) 23:35:06.030225デフォルトの名無しさん
2011/11/22(火) 23:51:03.48MLをディスってるんですか?
0226デフォルトの名無しさん
2011/11/22(火) 23:54:47.57ポイントフリーは読みにくい型エラーの温床になるから
あんまりやらないようにしてるんだけど
0227デフォルトの名無しさん
2011/11/22(火) 23:55:21.01<+>とか.|.とか>>=とか
0228デフォルトの名無しさん
2011/11/23(水) 00:24:00.14(.).(.)
0229デフォルトの名無しさん
2011/11/23(水) 03:27:23.65そうそう、だいたい奇天烈演算子大会になってるよね。
で、演算子の字面見ても殆どイメージ湧かないし。
いや、別に二項演算子が嫌いなわけじゃないけど、セルフドキュメント性が低すぎる。
0230デフォルトの名無しさん
2011/11/23(水) 05:48:44.62でも、なぜか
x = x+1
等しくないよ?という入門者の意見の多いこと多いこと…
この段階では、関数型言語の方が自然らしい
0231デフォルトの名無しさん
2011/11/23(水) 05:59:42.50都市伝説なのではないか。
0232デフォルトの名無しさん
2011/11/23(水) 06:46:58.39Haskell使いの目指すところが手続的な個所も関数的に書こうとする事だからね…
そこが、ちょっと珠に傷って気はする
手続的に書く方が自然なところは手続的に書いて、関数的に書く方が自然なところは関数的に書けば良いのに、とは思うよ
関数的に書ける所では、デッドロックとか考える必要なくて、簡単に並列化できるし、手続的に書く方が自然なところは普通に手続的に書けるんだしさ
0233デフォルトの名無しさん
2011/11/23(水) 06:51:12.91でも「三角形のこの頂点のx座標y座標は動かせないよ」と言っても
どうして?と言われるぞ…
0234デフォルトの名無しさん
2011/11/23(水) 06:52:20.60居た
xとyの値を交換するってので、
temp = x
x=y
y=temp
ってするじゃない?
何でtempが必要なのか。いくら説明しても分からない奴がいた。
メモリの仕組みも習ってるはずなのに、理解できないらしい。
多分、メモリの仕組みそのものが理解できてない。
関数型言語の場合
タプルで受け取って、そのまま交換すればいい
swap (x,y) = (y,x)
これなら、そういうレベルの人でも分かるだろう。
・・・と、思いたいw
0235デフォルトの名無しさん
2011/11/23(水) 06:54:08.09動かす(新しい座標を返す)関数作ればいいだけだろ
0236デフォルトの名無しさん
2011/11/23(水) 06:55:17.51それが日本語で普通に考えた時のやり方と全然違っていても
あくまでハスケルっぽいほうが自然なんだよ。
同じように、ハスケラが言う関数プログラミング的というのは
ハスケルっぽく書いてあるということで、MLとかLISPとかで
スマートに書いてあっても、それは関数プログラミング的じゃないんだよ。
0237デフォルトの名無しさん
2011/11/23(水) 06:56:36.72手続き型でもswapぐらい普通に実装できるが。
def swap(x,y):
return y, x
0238デフォルトの名無しさん
2011/11/23(水) 06:58:55.33そんなので騙せるのは大人だけだよ。
新しい三角形をつくったって、元の三角形は動いてない。
0239デフォルトの名無しさん
2011/11/23(水) 07:25:25.55日本語とか以前として、算数/数学っぽく書けるって感じかな
数学に国境はないから、日本とか外国とか関係ない
0240デフォルトの名無しさん
2011/11/23(水) 07:28:40.77それを教えてない段階で疑問持たれる訳で
関数型言語は数学ベースだから、そう言う疑問を持たれにくいし、疑問への回答も論理的
(こう言う機能が有るよ!!ではない)
0241デフォルトの名無しさん
2011/11/23(水) 07:30:44.56それが、後から元の三角形が必要になった時の利点
(手続き型だと新しい三角形を作る前に保存してないといけない)
0242デフォルトの名無しさん
2011/11/23(水) 07:44:58.98教えてない?
あんたが知らないだけでしょw
関数型の人ってどこまでジコチューよww
0243デフォルトの名無しさん
2011/11/23(水) 07:46:05.59それじゃ子供どころか大人も騙せないぞw
それで説明できたつもりでいるようだから、関数型はダメなんだよ
0244デフォルトの名無しさん
2011/11/23(水) 07:48:17.33叩く方も含めてほぼ100%関数型言語ユーザと思われ。
関数型言語の「メリット」は説明されなくても分かってるのでは。
Haskellでグラフのデータ構造を定義する上手い方法はあるのだろうか。
class Node {
Set<Node> edges;
...
};
普通のオブ指手続き言語ならこれだけの話だが。
0245デフォルトの名無しさん
2011/11/23(水) 07:48:25.78ハスケルじゃ関数名や変数名はつけないのか?
mapとかfoldとかfilterとかは世界共通の言葉なのか?
ハスケラのジコチューっぷりは世界共通なのか?
0246デフォルトの名無しさん
2011/11/23(水) 08:21:07.82俺はハスケラじゃないんで分からんけど、それってHaskellじゃ難しいの?
データ構造の定義に手続き型とか関係なさそうだが……
0247デフォルトの名無しさん
2011/11/23(水) 08:35:38.33edges への破壊的代入が出来ないとしたら?
0248デフォルトの名無しさん
2011/11/23(水) 08:37:53.790249デフォルトの名無しさん
2011/11/23(水) 09:52:48.08デフォルトじゃできないだけで。
0250デフォルトの名無しさん
2011/11/23(水) 11:07:12.02>>230
っ PASCAL
っ COBOL
他にも手続き型で代入演算子が = でない言語はあったと思うぞ
>>234
それも最近の言語は x,y = y,x と書けたりするからなあ
0251デフォルトの名無しさん
2011/11/23(水) 11:46:48.72分かるまで、ハノイの塔を実際にやらせてみるとか、どうだろうね。
0252デフォルトの名無しさん
2011/11/23(水) 11:47:34.34y = x
x = y
と書いたらもちろん意図した結果にはならないので、なぜこう書いたらダメなのか
というのはどのみち理解しないといけないような
変数と値のセマンティックスは値型/参照型云々でも違ってくるので
初心者にとってはそう簡単じゃないのでは
エイリアシングからくる初心者にとっては不可思議な問題を
とりあえず考えなくともよいという意味では、参照透明だと確かにわかりやすいのかも
■ このスレッドは過去ログ倉庫に格納されています