1 名前:デフォルトの名無しさん [2011/11/08(火) 18:06:57.51 ] 関数型言語は学習コストが高すぎる。 玩具として、研究者や学生の自己満足として、 教科書や黒板を賑わすアクセサリーとして、 あるいは頭の体操としての価値は認める。 だが、仕事ではほとんど使い物にならない。 やれば作れる、実際に作った、そんな言い分は聞き飽きた。 主要なソフトウェアのほとんどは非関数型で書かれている。 関数型がプチブームだが、爆発的に採用が増えているとも考えられない。 いずれ関数型のブームは去るだろう。 仮に関数型が生き残ることがあったとしても、 手続的な言語における一部の機能としてだろう。
152 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 23:21:28.94 ] にしてもCTMCPをやってる人って少ないよね。(ネットでは) 一部の読んだ人って大学の輪講とかで使ってんのかな。
153 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 23:43:34.95 ] CTMCP程度で挫折してたらこの先厳しいだろ。
154 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 23:49:37.01 ] インドから来てた短期研修生は知ってたな。 DB構築なんかも初めてのパッケージだとか言いながら、ネットで(勿論英語サイトを)調べながらちゃっちゃと組んでたw
155 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 23:58:14.99 ] >>152 複数のプログラミング言語を使った後に読んだが、計算モデルの意味が解って、その言語に適したコーティングをやり易くなった。
156 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:13:05.80 ] >>155 なるほど、僕も複数の言語使ってるけど、参考になります。その言語 言語で適した書き方あるもんね。
157 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 04:11:37.15 ] 関数型言語って役に立つな。 スイスの海軍並に役に立つな。
158 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 08:59:35.09 ] >>149 つ Oz
159 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 09:12:59.88 ] >>155 適した書き方、もあるが 解決したい問題→どの問題領域か?→どの計算モデルが適しているか?→どの言語が適しているか? の見極めが早くなるので、読んどいた方が後々楽。 勿論、「最適言語」にも幅があるので、効果/追加リソースが大きいのを選ぶことになる。
160 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 13:34:00.62 ] でも、それは問題解決というパラダイムに縛られた考え方。 プログラミングは問題解決型の領域だけじゃないぜ?
161 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 13:53:38.26 ] 低スキルでもどの言語でも大差なく扱える問題は、自分の慣れた言語でやれば良い話だな。 世間の仕事の9割以上はそういった、単純な事務処理だから別に問題ではない。 その手の仕事だけやる分には、このスレに書きこむ必要もないだろう。
162 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 13:59:30.67 ] >>161 一兵卒の意見だな
163 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 14:33:56.69 ] 面白いよな。 問題解決領域を見極めた方法がわかりやすい本だよ といえば、 問題解決のパラダイムに囚われた考え方。そんなんだけじゃないぜ? と どの問題でも大差なく扱える問題は自分でなれた言語でやれば良い話。 >>159 のサジェスチョンを全く理解してないってことだと思う。
164 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 17:49:54.58 ] >>163 問題解決パラダイムに染まりきってるね。 問題解決以外はどの言語でも大して変わらんとか、分かりやすいドカタ思考だ。
165 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 18:06:24.27 ] >>164 うーん。。。 この人って 問題解決パラダイムのこと書いてたら、 それしか頭にないと思う人だろうか?お気の毒な頭脳をお持ちなのね。
166 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 18:07:42.85 ] そもそも >>159-161 のながれを...
167 名前:デフォルトの名無しさん [2011/11/18(金) 21:41:13.95 ] え?
168 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 22:12:35.82 ] >>165 一連の書き込みを、自分ともう一人だけがしてると思ってんじゃないかな?
169 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 04:49:42.63 ] おかしいのは>>163 だけで、>>159 は真っ当だなw
170 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 10:48:46.88 ] >>169 やっぱりお気の毒な頭脳だろう。 丁寧に書くと>>163 は>>161 ,162の皮肉だって。 なんで流れを読まないんだろう。
171 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 10:50:37.86 ] >>170 日本語お上手ですねw
172 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 12:35:11.07 ] >>93 Rubyで書いてみたいな…けどHaskellわかんないんだ JavaとPythonなら分かるんだけど、どんなコードだったの?
173 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 18:15:42.25 ] 久しぶりに社会に出たらC#が流行ってたのでやらされた。 C#にはnullとかいうのがあるらしい。 クソめんどうくさかった。
174 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 20:37:19.00 ] >>172 public 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; }
175 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:04:29.52 ] >>172 pyths n = [(x,t,z) | x <- [1..n], y <- [1..n], z <- [1..n], x^2 + y^2 == z^2]
176 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:20:09.18 ] >>175 yの代わりにtが混入してる。
177 名前:172 mailto:sage [2011/11/20(日) 02:00:52.12 ] >>174 お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だと。
178 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:54:00.73 ] これでもいい気はする。 def pyths(n) (1..n) .to_a .combination(3) .select{|x,y,z|x*x+y*y==z*z} end
179 名前:172 mailto:sage [2011/11/20(日) 02:59:41.99 ] …Array#combinationとか初めて知ったぜ
180 名前:デフォルトの名無しさん [2011/11/20(日) 06:49:14.50 ] >>175 >>178 haskellよりrubyの方が短いね
181 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 19:48:27.46 ] なあ、そもそも俺はピタゴラス数を求めるプログラムにしか見えないんだが 結局、何を求めるプログラムなわけ? 関数型言語って人が見て何をやってるのか分からない言語じゃないのか?
182 名前:デフォルトの名無しさん [2011/11/20(日) 19:57:20.80 ] 内包表記と関数型言語の関係ってどう解釈したらいいんだろうね。
183 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 20:27:28.37 ] 喫茶店で若いOL風の女性がCTMCP読んでて萌えた
184 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 20:53:48.34 ] そこで 俺のmozartでozozしないか?と聞かないと。意味不明
185 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 21:19:26.49 ] 正直、174だろうが175だろうが、178だろうが それぞれの熟練プログラマが書いたら効率は そんなに変わらなくね? アセンブラとかなら変わるだろうけど 違うとしたら、178が何をやってるのか理解するのに勉強が 必要だというぐらいだろ
186 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:21:58.23 ] >>181 > 関数型言語って人が見て何をやってるのか分からない言語じゃないのか? それは手続き型言語
187 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 00:40:13.63 ] 手続きは 資材を並べていく感じ 関数は 資材を加工する機械に通してる感じ。
188 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 01:07:17.13 ] >>186 関数型は未だにパッと見でわからないです。
189 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 01:08:58.40 ] 関数型は組み合わせ 手続き型は積み重ね
190 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 02:42:58.91 ] 手続き型言語は古典力学 時間の流れは一方的、開いた系で現実的 関数型言語は量子力学 時間の流れは存在せず、閉じた系で理論的
191 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 03:23:52.64 ] 手続きは乱雑 関数型は整理
192 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 07:42:39.76 ] 手続き型は系列 関数型は羅列
193 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:02:53.73 ] >>174 元ネタが見つからないのでわからないのですが、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 }); }
194 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:26:01.80 ] >>193 それ、間違い。浮動小数点数の扱いに慣れてない?
195 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:30:13.71 ] すみません、わからないので教えてください。
196 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:36:50.09 ] なんだか、遂に、Ozまで流行りだした。
197 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:46:16.00 ] >>196 Prologには既にブームの兆しがあるし、関数型の周辺に 猛烈な勢いで関心が拡がって、渉猟されてる感がある。
198 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:48:26.52 ] >>34 Erlang人気は意外だった。
199 名前:205 mailto:sage [2011/11/21(月) 08:50:34.60 ] 何か壊れてる? >>34 でなくて、>>196 だね。
200 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 09:32:35.99 ] >>185 理解するのに勉強が必要って…どれも必要だろう
201 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 10:25:56.50 ] >>181 まんま、ピタゴラス数を求める関数でんがな パッと見で分かってるじゃん
202 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 02:11:23.03 ] >>188 当然関数型でも解りやすいのと解りにくいのがある。 Perlの変態コードだってパッと見わからんでしょ。 それに手続き型に何年親しんでから、関数型をどれくらいやったのか? 単なる慣れの要素もある
203 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 05:13:59.50 ] >>200 その勉強量が違うだろ 多くの人が知らない概念を使ってる場合、 その多くの人は新たに勉強する必要がある 知ってる場合は勉強する必要はない
204 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 12:55:21.67 ] >>202 関数型でわかりにくいというのはどこを指してるのか? (reduce .. (filter .. (map .. (map .... もなぁーど ... 基本は再帰を乗り越えなアカンっていうのはある。関数型で バッドノウハウだと思ってるのは、末尾再帰くらいかも。
205 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 15:35:23.14 ] ポイントフリーな書き方が出来るようになれば カッコも再帰も最小限ですむよ
206 名前:デフォルトの名無しさん [2011/11/22(火) 16:09:47.64 ] >>205 ハスケルだったらね。ポイントフリーのほうが楽なこと多いよね。 あれで必要以上に複雑なことしなければ、誰だって使えるようになるでしょうよ。
207 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 17:12:14.50 ] 関数型が分からん奴ってunlambdaでもやってんの?
208 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 19:41:54.44 ] ポイントフリーは難解
209 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 20:10:56.45 ] 関数型が広まらなかったのは、ハードウェアの制限のせい 64ビットOSが普及すれば、スクリプトより楽な巻子型言語が普及・・・して欲しいなぁ… 関数型言語って、基本的に簡単だけど、要求スペックも無限のメモリ、無限のクロックなんだよね・・・ 通常アプリでメモリやクロック、スレッドを気にしなくてよくなったら、普及すると思うんだ
210 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 20:11:45.59 ] x巻子 o関数
211 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 20:20:11.59 ] 追記(?) それを解消するためのアルゴリズlムであり、末尾再帰なんだと思う
212 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 20:30:08.07 ] プログラミング言語は道具に過ぎないってことを忘れてるだろ 現実を無視しちゃいかんよ
213 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:00:40.61 ] 193のどこが間違えているのか教えてください
214 名前:デフォルトの名無しさん [2011/11/22(火) 21:15:40.50 ] プログラマーか否かに関わらず、 人は手続型で思考する。 だから、先入観の無い子供でも 関数型は手続型より難しいと感じる。 S式や再帰を強調し、ほら簡単だろと言うから 関数型は嫌われてメジャーになれない。
215 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:37:40.15 ] 手続き型が自然なのは同意だが 一方数学というのは思考を簡約できる道具なわけで 手続きに関数の表現を盛り込んでいくのがいいと思う
216 名前:デフォルトの名無しさん [2011/11/22(火) 21:41:57.49 ] 手続きが自然ってほんとかな? 疑問だな。
217 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:48:11.68 ] 高校数学あんまやってないプログラマのこと考えたら自明だろ
218 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:57:05.12 ] むしろC的なメソッドを先にやってから 中?高?で関数を教えたほうがいいかもしれん
219 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 21:59:19.13 ] 手続きが思考に近いってのには異論はない
220 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:01:53.48 ] 末尾再帰がバッドノウハウてどういう意味?
221 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:09:42.98 ] 今日考えていたんだが、 UMLで設計するんじゃなくて、DFDで設計したらいいんだよね?
222 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:23:19.23 ] 状態がないのに自然なわけない
223 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:30:49.75 ] 関数言語の簡単さ、綺麗さって オフサイドルールの面も大きいと思う
224 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:35:06.03 ] 中括弧言語は それだけで下品になるからなぁ。
225 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:51:03.48 ] >>223 MLをディスってるんですか?
226 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:54:47.57 ] >>206 ポイントフリーは読みにくい型エラーの温床になるから あんまりやらないようにしてるんだけど
227 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:55:21.01 ] でもHaskellって実際のコード見ると妙な演算子があちこちにいるよね <+>とか.|.とか>>=とか
228 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 00:24:00.14 ] ポイントフリーといえば、ほくろ付き巨乳とかあるね。 (.).(.)
229 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 03:27:23.65 ] >227 そうそう、だいたい奇天烈演算子大会になってるよね。 で、演算子の字面見ても殆どイメージ湧かないし。 いや、別に二項演算子が嫌いなわけじゃないけど、セルフドキュメント性が低すぎる。
230 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 05:48:44.62 ] >>214 でも、なぜか x = x+1 等しくないよ?という入門者の意見の多いこと多いこと… この段階では、関数型言語の方が自然らしい
231 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 05:59:42.50 ] でも、そこで躓く入門者というのを見たことがない。 都市伝説なのではないか。
232 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:46:58.39 ] >>227 Haskell使いの目指すところが手続的な個所も関数的に書こうとする事だからね… そこが、ちょっと珠に傷って気はする 手続的に書く方が自然なところは手続的に書いて、関数的に書く方が自然なところは関数的に書けば良いのに、とは思うよ 関数的に書ける所では、デッドロックとか考える必要なくて、簡単に並列化できるし、手続的に書く方が自然なところは普通に手続的に書けるんだしさ
233 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:51:12.91 ] >>230 でも「三角形のこの頂点のx座標y座標は動かせないよ」と言っても どうして?と言われるぞ…
234 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:52:20.60 ] >>231 居た xとyの値を交換するってので、 temp = x x=y y=temp ってするじゃない? 何でtempが必要なのか。いくら説明しても分からない奴がいた。 メモリの仕組みも習ってるはずなのに、理解できないらしい。 多分、メモリの仕組みそのものが理解できてない。 関数型言語の場合 タプルで受け取って、そのまま交換すればいい swap (x,y) = (y,x) これなら、そういうレベルの人でも分かるだろう。 ・・・と、思いたいw
235 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:54:08.09 ] >>233 動かす(新しい座標を返す)関数作ればいいだけだろ
236 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:55:17.51 ] ハスケラが言う自然ってのはハスケルっぽく書けるということで、 それが日本語で普通に考えた時のやり方と全然違っていても あくまでハスケルっぽいほうが自然なんだよ。 同じように、ハスケラが言う関数プログラミング的というのは ハスケルっぽく書いてあるということで、MLとかLISPとかで スマートに書いてあっても、それは関数プログラミング的じゃないんだよ。
237 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:56:36.72 ] >>234 手続き型でもswapぐらい普通に実装できるが。 def swap(x,y): return y, x
238 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:58:55.33 ] >>235 そんなので騙せるのは大人だけだよ。 新しい三角形をつくったって、元の三角形は動いてない。
239 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:25:25.55 ] >>236 日本語とか以前として、算数/数学っぽく書けるって感じかな 数学に国境はないから、日本とか外国とか関係ない
240 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:28:40.77 ] >>237 それを教えてない段階で疑問持たれる訳で 関数型言語は数学ベースだから、そう言う疑問を持たれにくいし、疑問への回答も論理的 (こう言う機能が有るよ!!ではない)
241 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:30:44.56 ] >>238 それが、後から元の三角形が必要になった時の利点 (手続き型だと新しい三角形を作る前に保存してないといけない)
242 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:44:58.98 ] >>240 教えてない? あんたが知らないだけでしょw 関数型の人ってどこまでジコチューよww
243 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:46:05.59 ] >>241 それじゃ子供どころか大人も騙せないぞw それで説明できたつもりでいるようだから、関数型はダメなんだよ
244 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:48:17.33 ] こういうスレにわざわざ議論しにくる人は、 叩く方も含めてほぼ100%関数型言語ユーザと思われ。 関数型言語の「メリット」は説明されなくても分かってるのでは。 Haskellでグラフのデータ構造を定義する上手い方法はあるのだろうか。 class Node { Set<Node> edges; ... }; 普通のオブ指手続き言語ならこれだけの話だが。
245 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 07:48:25.78 ] >>239 ハスケルじゃ関数名や変数名はつけないのか? mapとかfoldとかfilterとかは世界共通の言葉なのか? ハスケラのジコチューっぷりは世界共通なのか?
246 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:21:07.82 ] >>244 俺はハスケラじゃないんで分からんけど、それってHaskellじゃ難しいの? データ構造の定義に手続き型とか関係なさそうだが……
247 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:35:38.33 ] >>246 edges への破壊的代入が出来ないとしたら?
248 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:37:53.79 ] Google Trendsで現実見て来いよ
249 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 09:52:48.08 ] Haskellでも破壊的代入はできるんだけどね。 デフォルトじゃできないだけで。
250 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 11:07:12.02 ] 正直、記号の分かりにくさはどっちもどっちじゃないかな >>230 っ PASCAL っ COBOL 他にも手続き型で代入演算子が = でない言語はあったと思うぞ >>234 それも最近の言語は x,y = y,x と書けたりするからなあ
251 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 11:46:48.72 ] >>234 分かるまで、ハノイの塔を実際にやらせてみるとか、どうだろうね。
252 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 11:47:34.34 ] 多重代入サポートしてる言語でも y = x x = y と書いたらもちろん意図した結果にはならないので、なぜこう書いたらダメなのか というのはどのみち理解しないといけないような 変数と値のセマンティックスは値型/参照型云々でも違ってくるので 初心者にとってはそう簡単じゃないのでは エイリアシングからくる初心者にとっては不可思議な問題を とりあえず考えなくともよいという意味では、参照透明だと確かにわかりやすいのかも