1 名前:名無しのプログラマ [2015/08/09(日) 17:46:33.69 ID:Icb40LOY.net] for,while使うの嫌いで基本的に再帰多用するんだが、だめなの? 皆から敬遠されてる気がする
321 名前:デフォルトの名無しさん [2015/08/16(日) 23:24:18.75 ID:5vUfdwLX.net] 木の探索はスタック一本で実現できるので、再帰は使わないほうが良い。 再帰使うと攻撃に弱くなる。
322 名前:デフォルトの名無しさん [2015/08/16(日) 23:30:59.94 ID:5vUfdwLX.net] 木自体もリンクリストを使って直列化したデータ構造で表現しておくと、 操作がやりやすくなる。 直列された状態では通常、前から後ろに移動していくと、深さ優先探索の状態になる。 デメリットは、キャッシュに乗りにくくなることと、使用メモリー量が 大きくなること。 ただし、操作のコストが一般に低くなるので、十分ペイする。 そして攻撃に強い。
323 名前:デフォルトの名無しさん mailto:sage [2015/08/16(日) 23:32:55.62 ID:qX4pihue.net] >>315 > 最適化とステートレス化のためにパラメタで渡すのは常識だろ お前、最適化と言ったら、スピード上げることしか思いつかないのか? 「可読性の最適化」だよ。 可読性がいい方向にコードを最適化することで メンテナンス性を上げることができる。 お前は単なるスピード狂。 お前が書くコードは読みづらい
324 名前:デフォルトの名無しさん [2015/08/16(日) 23:44:57.83 ID:5vUfdwLX.net] データ構造とアルゴリズムの分離を考えても再帰は不利。
325 名前:デフォルトの名無しさん [2015/08/16(日) 23:47:34.77 ID:5vUfdwLX.net] >>313 グローバル変数は、再利用性を著しく損なうので避けるべき。
326 名前:デフォルトの名無しさん mailto:sage [2015/08/16(日) 23:55:06.97 ID:ysqlqGaE.net] >>318 スタック消費抑えるために最適化するのは常識なんだが どこの世界の似非プログラマ?
327 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 00:08:45.56 ID:kjPlSxav.net] つかクイックソートって 今のアーキテクチャにはあわんでしょ
328 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 00:28:50.83 ID:ZK4qdIAD.net] とりあえず否定するスタイル
329 名前:デフォルトの名無しさん [2015/08/17(月) 00:36:22.18 ID:I1eaKx/I.net] >>309 バブルソートで論破されて必死やなw >>310 衒学的なオナニーされておられるところ大変恐縮ですが、結局ループでいいってことだろ。 抽象化言いたいだけやろ。しょうもな。
330 名前:デフォルトの名無しさん [2015/08/17(月) 00:40:53.56 ID:I1eaKx/I.net] 結局さあ、再帰に大きな瑕疵があるってことわかったんだから、 再帰厨は潔く観念して俺に敬服するべきだと思うんだよね。
331 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 01:17:00.24 ID:3kIm88tb.net] 再帰はバカには理解し難いと言う欠点がある。
332 名前:デフォルトの名無しさん [2015/08/17(月) 01:44:30.24 ID:y5LPXYrp.net] >>326 ほんこれ。
333 名前:デフォルトの名無しさん [2015/08/17(月) 02:05:13.63 ID:PZrD2gdn.net] トリッキーな構造だから一見わかりづらいよな。 再帰を使わないと解決できない問題があるとすれば、再帰を使えない事がその人の限界になる。
334 名前: ◆QZaw55cn4c mailto:sage [2015/08/17(月) 05:40:35.05 ID:TRZJFBPo.net] >>322 今でも普通クイックソートだね. 次数が減ったら挿入ソートや選択ソートに切り替えはするが
335 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 08:18:37.09 ID:bgkOWECj.net] クイックソートはループで実装 これ常識 ループの可読性が悪いなんて言ってるのはレベル低すぎ
336 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 09:50:03.46 ID:fqo2f2L7.net] >>330 while()って読み難くありませんか?
337 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 10:03:44.62 ID:HKx5lNza.net] >>331 質問じゃなくて、コードを書いて、 このコードとこのコードを比較して while()は読みづらいって言いなさい。 他人の失言を狙ってるのバレバレだから。
338 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 10:29:19.62 ID:i5qYhPSf.net] お前、バカだろう。 繰り返しで書いたクイックソートは再帰で書いたそれに比べて可読性が低いのだ。
339 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 10:50:30.82 ID:HKx5lNza.net] それはクイックソートだけの話だからな。
340 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 10:52:50.02 ID:PCwhqe1a.net] 結局は、構造を概念どおりに忠実に実装すれば再帰になるし、 頭の中で最適化すればループになるし、という話だよね。 どっちでもいい人にとってはこれほど無駄な議論はない。 結局どちらかしか使えない無能たちの罵り合いでしかない。
341 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 10:56:29.07 ID:HKx5lNza.net] >>335 いや、そうじゃないんだよ。 某関数型言語では、その言語の制約上 再帰で書くしかないんだよ。 だけど、自分が使ってる言語は優れていると 思いたいものだから、再帰しか使えない制約ではなく 再帰のほうが優れてるかということにしたいんだよ。 どちらかしか使えない人なんていない。 関数型言語が使えないだけ。
342 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 11:02:29.07 ID:PZrD2gdn.net] Cで探索・ソートについて言えば、速度面で有利なのはループ。 関数コールが少ない分、ループの方が圧倒的に速い。 速度を追求するならループになる。
343 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 12:05:32.92 ID:fqo2f2L7.net] >>332 単純に for( ; ; ){} に較べて読みにくくないかと。 for( ;<<ループの終了条件>>; ){ p() } は for( ;<<ループの終了条件>>; p()){} の内、必要な情報だけ第三引数に抽出することができるが、 while(<<ループの終了条件>>) { p() } だと どんな情報に着目するべきかは終了条件以外のヒントがない。 それでwhile()は難しいかと。
344 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 12:18:46.07 ID:HKx5lNza.net] >>338 なんの情報が必要なんだよ? 終了条件さえあれば十分だろ? ジェネレータとか、そういうもんだぞ。
345 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 13:15:13.35 ID:i5qYhPSf.net] >>336 お前、バカだろう。 繰り返しで書いたクイックソートは再帰で書いたそれに比べて可読性が低いのだ。 仕様上、繰り返しを記述出来ない言語は比較の対象外だ。
346 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 13:43:37.43 ID:bgkOWECj.net] 可読性の高い低いなど下らない話。 読めるコードであれば何の問題もない。 実際にプログラマは比較関数を自作して クイックソートのライブラリに当てはめるだけなんだし。 実用性を備えるループ方式と、 使用厳禁の再帰方式とじゃあ比較にならない。
347 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 13:51:20.52 ID:i5qYhPSf.net] じゃ、これは撤回だね。 > ループの可読性が悪いなんて言ってるのはレベル低すぎ
348 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 13:57:08.88 ID:bgkOWECj.net] 読めるコードであれば何の問題もない。 クイックソートのコードは十分に読めるコード ループの可読性が悪いなんて言ってるのはレベル低すぎ
349 名前:デフォルトの名無しさん [2015/08/17(月) 14:08:09.19 ID:J0NniHMW.net] もう何で争ってるのか不明なんだけど
350 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 14:09:55.63 ID:bgkOWECj.net] 争いなんてないさ
351 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 14:18:37.75 ID:HKx5lNza.net] 読めるコードであれば何の問題もない。 ただ可読性は高い方がいい。 ただそれだけのことだろう?
352 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 14:53:55.09 ID:i5qYhPSf.net] >>343 (可読性悪くても)読めるコードなら問題ない。と言いつつ。 同レス内で、ループの可読性の低さを否定してる。 お前、バカだろう。
353 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 18:09:10.76 ID:5EpnwL1P.net] この馬鹿はバカが口癖なのか?
354 名前: ◆QZaw55cn4c mailto:sage [2015/08/17(月) 20:01:13.21 ID:TRZJFBPo.net] >>330 書いてみろよ
355 名前: ◆QZaw55cn4c mailto:sage [2015/08/17(月) 20:12:36.56 ID:TRZJFBPo.net] >>340 というより,クイックソートはループでは書けない ヒープにスタック構造を持ち込んでおきながら「ループで書きましたぁ」とか‥
356 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 20:16:45.10 ID:rLKFJTDK.net] >>350 再帰処理のクイックソート vs 非再帰処理のクイックソート www.drk7.jp/MT/archives/000995.html 再帰を使わないでクイックソートは実装できるね。 しかもそっちのほうが速い
357 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 20:18:08.13 ID:rlqXRw2u.net] 暇をもてあました学生が再帰で俺TUEEEEEEする遊び
358 名前:デフォルトの名無しさん [2015/08/17(月) 20:40:03.62 ID:RDuEyBYc.net] 再帰でCPS変換とかサクサク使えないレベルならループ書いときゃいいんじゃね 可読性に関する再帰のコストはほぼ周りがCS卒かどうかで決まる CS勉強してりゃ再帰の方が圧倒的に読みやすいし加工しやすいし最適化しやすい してなきゃループがわかりやすい。そんだけ。
359 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 20:52:33.62 ID:bgkOWECj.net] ループの可読性にしつこく文句言うやついるかと思っていたら、 これまで話を完全に無視して、 ループでは書けないなどと言い出すものまで現れるのかよ・・・
360 名前: ◆QZaw55cn4c mailto:sage [2015/08/17(月) 21:08:42.74 ID:TRZJFBPo.net] >>351 それ,結局データ構造にスタックを持ち込んでいるね‥ 非再帰とはいいにくい,普通に再帰で書いたほうがいいんじゃないかな‥
361 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 21:27:59.23 ID:rlqXRw2u.net] 思い出しやすい方で書くかなあ。CPS変換が読みやすいって言ってるように見える人がいるけど サンクがどれだけ詰まれてくか目に見えないじゃない ああ、Lispならわかるんだっけ
362 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 21:34:14.06 ID:5i910ycA.net] >>355 再帰による実装は、コードが簡潔になる利点はあるものの、 スタックが足りなくなる恐れがあります。 ソート作業は、大量のデータに対して行うことも多いので、 この問題は致命的です。 この問題は、自力でスタックを制御できるようにして、 再帰構造を取りやめれば解決できます。 スタックサイズは log2 n 以上の容量があれば足りることが実証されています。 int型が 64ビットだとしても、たかだか 128要素で済むので、定数で構わない ttp://u222u.info/nh3Q
363 名前:デフォルトの名無しさん mailto:sage [2015/08/17(月) 23:29:17.65 ID:i5qYhPSf.net] >>351 お前、バカだろう。 perlは関数呼び出しのオーバーヘッドがでかいのであたりまえ。 java版 繰り返し:平均 408.86 ms, 再帰:平均 236.81 ms stackoverflow.com/questions/12553238/quicksort-iterative-or-recursive The average of the iterative solution was 408.86 ms while of recursive was 236.81 ms However -these are constant number of ops, while not changing the number of "iterations". アンチ再帰の根拠がまた一つ否定された。
364 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 00:54:03.83 ID:iaUEwJyI.net] 単位がオーダーだけの文献は読まんでいい さすがに古すぎる 単位にサイクル使ってるやつだけ参考にしろ
365 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 04:11:08.35 ID:6SfpmUjr.net] >>357 log2 nに限定するならメディアン必須になるし、 投機的実行や並列化の恩恵にも預かれないぞ それこそ「現在のアーキテクチャに合わない」 >>359 サイクルって何?
366 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 08:16:42.70 ID:FMltliIe.net] >>360 log N 「以上」なのでメディアン(割りきれるか割りきれないかだよね?)は融通効くし、 パイプラインは関係ないと思うんだけど具体的にどう、最適化に悪影響なの?
367 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 09:23:27.84 ID:6SfpmUjr.net] >>361 並列は言わずもがな、分岐が増えるほど投機実行も不利 >log N 「以上」なのでメディアン(割りきれるか割りきれないかだよね?)は融通効くし だから全要素からのメディアン取るのが必須になるだろと さもなくば埋まったら切るとかの戦略でもない限り、大きさ固定のスタックは無理
368 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 09:32:58.52 ID:6SfpmUjr.net] >>361 ごめん、リンク先見てなかった 小さい方だけ計算していくなら、再帰でもループでも可能だね
369 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 09:55:04.16 ID:biaMMpq3.net] 再帰法の方が簡潔な記述となり実装が簡単となったとしても、 処理速度やメモリ消費の点で効率が悪い。 これが真実。 効率の求められるクイックソートはループ方式ですね。
370 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 10:02:42.34 ID:FMltliIe.net] >>363 実は自分もメディアンのこと、ピボットのことだと気づかなかったから変なこと言ってました…… なんかlog Nとスタックのワードだけで勝手に勘違いしてた。 恥ずかしいからROMります……
371 名前:デフォルトの名無しさん [2015/08/19(水) 06:32:50.20 ID:h1yQg/qV.net] サイクルって結局何だったんだ オーダーと比較するんだからCPUサイクルのわけないだろうし
372 名前:デフォルトの名無しさん [2015/08/19(水) 06:48:19.79 ID:8XFwGYsL.net] 再帰はセキュリティの問題から使ってはいけない。 これは既に常識。
373 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 06:53:40.18 ID:3Ipmhs8Y.net] >>367 ワトソンでは基幹部分で使われている。大変だ。
374 名前:デフォルトの名無しさん [2015/08/19(水) 06:59:26.41 ID:8XFwGYsL.net] じゃあワトソンは使うな。
375 名前:デフォルトの名無しさん [2015/08/19(水) 08:04:33.92 ID:8XFwGYsL.net] 末尾再帰はループに展開されるから大丈夫 → 結局再帰が良くないからループにするんだよね? ◯◯では使われてる → じゃあ◯◯は使うな、使われてないのに適当なこと言ってたら訴えられますよ? 再帰下降法も使うなというのか? → 再帰下降法は使うな、入力の解析を再帰で行うのは最も危険。
376 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:08:05.43 ID:3Ipmhs8Y.net] >>370 ワトソンの基幹部分にPrologが使われているというのは常識だが。
377 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:18:36.42 ID:cBcKF4Ir.net] >再帰はセキュリティの問題から使ってはいけない。 だから一般化しすぎだろ scalaとかでも同じ事言うの?
378 名前:デフォルトの名無しさん [2015/08/19(水) 08:20:15.23 ID:8XFwGYsL.net] 再帰の危険性はCERT CC読むだけでもわかること。 いまさら再帰を使うべきというのはおかしい。 しかも、何故かWEB系の人に多いのがおかしすぎる。 WEBは最も再帰を避けるべきであろう。
379 名前:デフォルトの名無しさん [2015/08/19(水) 08:25:28.68 ID:8XFwGYsL.net] >>372 言語が再帰を別のアルゴリズムに変更することを保証しているなら、 使っても良いだろう。 しかし保証しないのであれば、使うべきではない。 例えば、一般的なケースでは大丈夫 → これは使うな、攻撃者は一般的なケースで攻撃してこない。 再帰下降法について擁護するものは、大体一般的な例を述べるが、攻撃者は 最悪のケースで攻撃してくる。
380 名前:デフォルトの名無しさん [2015/08/19(水) 08:27:48.29 ID:8XFwGYsL.net] 保障されるのか保障されないのか判別できないなら使うべきでない。 大抵のコンパイラがループに展開する → これは使うべきではない、言語が保証しない限り 使ってはいけない。
381 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:32:59.75 ID:cBcKF4Ir.net] >>374 いやだから末尾再帰は確かにループに展開されるけど 普通の再帰は展開されない(余再帰とかいうあれ) val one:Stream[Int] = 1#::one
382 名前:デフォルトの名無しさん [2015/08/19(水) 08:38:24.50 ID:8XFwGYsL.net] >>376 じゃあ使うなよ。 再帰がヒープに展開されるなら、現状では使っても良いとするしかないだろう。 現在のコンピュータにはその程度の安全性しかない。 一方、マシンスタックが消費されるなら、これは使ってはいけない。 言語が保証できるかどうかはこういう話。 逆に言うと、保証できる言語は本質的に遅いから変えたほうが良いよ?
383 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:40:13.17 ID:cBcKF4Ir.net] そもそもVM上で動く言語でセキュリティの観点から再帰使うな って言われてもな 一般化しすぎ
384 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:43:41.41 ID:cBcKF4Ir.net] >>377 遅延データ構造で余再帰使うなってあんた
385 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 08:47:34.95 ID:cBcKF4Ir.net] 入力をその場で評価せずに遅延データ構造であらわすってあるけど そこで末尾再帰なんかしたらそれこそ危ない
386 名前:デフォルトの名無しさん [2015/08/19(水) 08:58:49.14 ID:8XFwGYsL.net] >>380 遅延評価によってマシンスタック消費の抑制を保証できるのであれば、 使っても良いだろう。 しかし、保証するという事はどういうことが起きるのか、良く考えたほうが良い。 大抵のケースで保障できる → これは使ってはいけない、条件が付いた時点で保障できていない。
387 名前:デフォルトの名無しさん [2015/08/19(水) 09:01:52.31 ID:8XFwGYsL.net] 再帰は本質的に危険なので、教科書的にもループを基本にするべきではないだろうか。 逆に言うと、再帰で説明する教科書は、既に古いので使うべきでない。 20世紀の教科書。
388 名前:デフォルトの名無しさん [2015/08/19(水) 09:04:29.34 ID:8XFwGYsL.net] こういった議論でわかることは、最近の素晴らしい言語は、問題点の 議論を避けている。 結論が出るまで使わないほうが良い。
389 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 09:36:58.20 ID:3Ipmhs8Y.net] >>382 再入可能なコードは本質的に危険ということですか?
390 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 10:38:04.52 ID:qmnFr7bU.net] 再帰云々の議論をしている最中に関数型言語を持ち出してくる奴はキチガイ。 関数型言語なんて再帰キチガイが再帰を正当化するために作り出した言語で あって、逆に言えば関数型言語でない限り再帰に正当性は一切ない。 再帰キチガイは再帰に問題がありまくることを知っているからこそ、再帰を 満喫するために関数型言語なんていう
391 名前:キチガイ非効率言語を作ったんだから、 そこに収容されていて、一般論のスレに出てくるな。 [] [ここ壊れてます]
392 名前:デフォルトの名無しさん [2015/08/19(水) 10:55:26.78 ID:N4waeMow.net] うわあ手続きキチガイだ
393 名前:デフォルトの名無しさん [2015/08/19(水) 11:13:42.96 ID:h1yQg/qV.net] 要するに反論できないから関数型言語を議論から除きたいと
394 名前:デフォルトの名無しさん [2015/08/19(水) 11:17:04.81 ID:irPHrK71.net] >>385 そうですね。 >>384 最近のライブラリが歳入可能性に言及するのは、スレッド安全に関連する話です。 関係ない話題をうまく混ぜ込むのが最近のトレンドですが、ム板でやると 馬鹿だと思われますよ。
395 名前:デフォルトの名無しさん [2015/08/19(水) 11:19:08.64 ID:irPHrK71.net] >>387 関数型言語は言語が再帰を避けてくれるから安全だと言いたいんですよね? 言語が避けてくれるのは、再帰が危険だからですよね?
396 名前:デフォルトの名無しさん [2015/08/19(水) 11:22:24.20 ID:irPHrK71.net] 関数型言語自体が、まだ結論の出ていないものだと思います。 威勢の良い宣伝は良くあります。 それはどの言語でも経験したことです。 例えばJavaはC/C++のおよそ20倍高速だった時代もあったのです。 現在は、関数型言語がC/C++のおよそ100倍高速なのです。 従っていずれ1/100になるでしょう。
397 名前:デフォルトの名無しさん [2015/08/19(水) 11:28:11.15 ID:irPHrK71.net] C++は良く利用される以前、Cの二倍遅く、Cの二倍のメモリーを使うと言われていました。 これがC++が使われるようになった理由の一つです。 Objective-Cは逆に、Cの二倍速く、Cの二倍省メモリーだったのです。 従ってその時点でObjective-Cは負けていました。 過剰な宣伝が通用するのは、誰も使っていなかったからなのです。 関数型言語がC/C++の100倍まで高速化したのは、本当の本当に誰も使っていないからでしょう。
398 名前:デフォルトの名無しさん mailto:sage [2015/08/19(水) 12:45:01.27 ID:yS+hRb+C.net] >>385 うまいことを言う! これコピーして保存しとくぜ。
399 名前:デフォルトの名無しさん [2015/08/19(水) 23:06:26.12 ID:EEfFXLQD.net] 威勢の良い宣伝も糞も実際に使われてるだろ
400 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 06:59:05.01 ID:cFwOLAtj.net] スカトロを基準にして うんこは食べ物ですって言うようなもん
401 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 10:35:31.02 ID:PsQjKp/h.net] jbbs.shitaraba.net/netgame/14889/ ここに「おはむぅ('ω'`)」って書きこんで
402 名前:デフォルトの名無しさん [2015/08/20(木) 12:12:44.84 ID:5WCLlVT0.net] >>394 は発達障害
403 名前:デフォルトの名無しさん [2015/08/20(木) 17:13:17.66 ID:5F2FSsFe.net] 仕事でscalaとかscalaZとか使っとるから再帰や関数型が非実用的って言われると??ってなる
404 名前:デフォルトの名無しさん [2015/08/20(木) 17:14:14.66 ID:5F2FSsFe.net] あと別にそんなに高速性強調されるか?
405 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 17:42:02.04 ID:vSASgIXr.net] オレ、 「再帰関数が好き」って言ったら、 笑う?
406 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 17:42:58.19 ID:2qNm8QiI.net] >>397-398 関数型でも単純再帰はgotoみたいなプリミティブな構造だから 構造プログラミングにおけるwhileやforに相当するrecursion schemes使えって言われてるじゃん (例:catamorphismはfoldに相当するなど) recursion schemes含めて再帰が有用というなら妥当するけど、どういう論旨で再帰が有用とおっしゃる?
407 名前:デフォルトの名無しさん [2015/08/20(木) 20:45:39.40 ID:5WCLlVT0.net] 無理にfold使って書くより単純な再帰使うほうがわかりやすいなんて幾らでもある foldやmap使えってのを素人向けに強調するのは構わんが、行き過ぎるのも愚劣
408 名前:デフォルトの名無しさん mailto:sage [2015/08/20(木) 21:03:03.09 ID:2qNm8QiI.net] 残念ながらfoldやmapが使えるなら常に再帰よりそちらを使ったほうがよいと言い切れる なぜなら再帰で書いた関数は変更に弱いから おもちゃみたいなコードしか書かないなら別だがね
409 名前:デフォルトの名無しさん [2015/08/20(木) 22:00:29.18 ID:5WCLlVT0.net] >>402 >なぜなら再帰で書いた関数は変更に弱いから >おもちゃみたいなコードしか書かないなら別だがね はあ?
410 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 00:21:00.76 ID:IS5nxfT5.net] 一生ひとりでサンプルプログラム書いてろ 迷惑だから社会に出てくんなよ
411 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 00:25:28.79 ID:D+2gPP3C.net] >>400 基本的には再帰よりも高階関数というか型クラスに定義してある汎用的な関数を使ったほうがいい 同じ事ができるならより弱い力のものを使ったほうがいいし(monadよりapplicative,applicativeよりfunctor) が型クラスのインスタンス作る時に再帰で実装する時はあるよ
412 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 00:31:28.66 ID:D+2gPP3C.net] まぁところによりけりでscalaの標準ライブラリのコンテナのコードなんて while、再代入、ダウンキャストしまくりでとても関数型プログラミングとは言えない 利用者にとってはライブラリが関数型プログラミングで実装してあるかどうかよりも それを使って関数型プログラミングできる方が重要なんだからいいけど
413 名前:デフォルトの名無しさん [2015/08/21(金) 03:02:31.30 ID:wrsjniww.net] 日常業務で使ってるが、無理にfoldrで書いたりせずに 普通の再帰で書くことは少なくないしお互いに読みやすい fold厨とポイントフリー厨は同じ箱
414 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 09:15:46.95 ID:TIO5PnJE.net] >>397 何のお仕事?
415 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 12:24:12.68 ID:+b9Sq2lj.net] 簡単なアルゴリズムも書けないくせに何でもほいほい言語学習に飛びついて尖った知識が身につかない奴を見ると腹が建つ haskellで探索アルゴリズムも書けない奴はhaskellをいじるのはまだ早い
416 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 16:54:57.68 ID:0U24jQiQ.net] >>409 すれ違い。消えてよし。
417 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 17:05:56.55 ID:cNm3l2b6.net] 探索アルゴリズムなら高校のころ、 インターネットが普及してない時代に C言語で実装したことがあるからなぁ。 わざわざ言語変えて実装するまでもないかな。
418 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 19:59:06.06 ID:sO1LNJ7K.net] 言語、ツール、OS、デザインパターンみたいな道具や手法に拘るやつで 凄いと思えるやつに会ったことがない ただの手段で目的じゃねーからな 目的を達成するために適したものを選んで使うのが道具
419 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 20:11:40.29 ID:D0T0zJ3M.net] >>412 C/C++でループだけに徹して書く人は凄いと思うけど。 普通だったらもっと高級言語使って、再帰も拘らず自由に使って 楽しようとするでしょう。
420 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 20:23:54.14 ID:DXj+sr9D.net] 再帰を嫌う人って、抽象化が苦手なんだろうね フィボナッチ数列を例にとると、初項から順番にループを使って計算させることは簡単だけど、 そこから f(n) = f(n-1) + f(n-2) という数式に落とすのが苦手という感じ
421 名前:デフォルトの名無しさん mailto:sage [2015/08/21(金) 20:25:32.36 ID:106+9rwN.net] でも一般項で直接計算した方が速くね?