【アンチ】関数型言語は使えない【玩具】 2

■ このスレッドは過去ログ倉庫に格納されています
2012/02/28(火) 20:45:47.95
前スレ
http://toro.2ch.net/test/read.cgi/tech/1320743217/
2012/04/15(日) 10:39:20.38
>>317
ほう。つまり君は規格書に書いてあると言いたいわけだな?
引用して見せてよ。
2012/04/15(日) 10:41:39.25
>>319
規格書に書いてなかったら「未定義」だ
でも「違う」と言い切ったんだろ?だったら書いてあるんだろうが
2012/04/15(日) 10:41:54.91
>>318
だからね。規格書がない時代にどうして++が生まれたかの話をしてるんだよ。
規格書は後から作られたもの。

教科書にそう書いてあるから正しいんだとか言うなよ?
恥ずかしいからw
2012/04/15(日) 10:43:55.84
>>320
もしかして「セマンティクス」の意味がわかってないのかな?
2012/04/15(日) 10:46:24.21
>>321
> だからね。規格書がない時代にどうして++が生まれたかの話をしてるんだよ。

>>249から読み直したが、全然そんな話じゃなかったぞ
それとも>>249は規格書がない時代のCの話をしてたのか?
2012/04/15(日) 11:01:45.10
とんでもない間違いを何度も晒されてしまう>>248がかわいそうすぎww

2012/04/15(日) 11:10:47.57
> Cが作られたのは1971年だぞ。どんだけコンピュータが遅かったか。
> その時代に、時間がかかる最適化処理をコンパイラにやらせるわけないじゃないか。
> 当時は人間が頑張ってC言語上で最適化する時代だったんだよ。

嘘八百をご苦労さーんw

世界最初のFortranコンパイラが、「コンパイラなんてそんなものか」と
バカにされないために、最適化に苦心した、という話とか、最適化を
勉強していれば普通は常識。
2012/04/15(日) 11:41:26.16
結局、シンタックスシュガーの話をしているところに
規格書がない時代のセマンティクスの話をしだして
>もう二度とコードを書かないほうがいいぞw
とかドヤ顔で言っちゃったということか
2012/04/15(日) 12:40:56.55
よう、俺に振り回された気分はどうだい?w
2012/04/15(日) 17:13:44.57
事の発端はこれか。確かにこれは馬鹿すぎる。

>>248
> 248 名前:営利利用に関するLR審議中@詳細は自治スレへ [sage]: 2012/04/07(土) 01:20:29.83
> 良く使うから構文糖が用意されるって話は分かるが
> 相性が悪いから?なにそれ?
>
> じゃあ何か。C言語で x=x+1 を x++ と書けたり
> *(x+1) を x[1] と書ける構文糖が用意されてるのは、
> C言語がインクリメントや配列と相性悪いからか?
2012/04/16(月) 08:53:23.07
スレタイすら読めない奴って、他スレで負けて逃げてきた連中だろうな。
2012/04/16(月) 08:55:57.06
自分が負け続きで逃げっぱなしなので、必死でそのように思い込もうとしているのですねわかります
2012/04/17(火) 02:39:26.84
リーナスがこのスレに書き込みしてるのか?
2012/05/11(金) 10:24:30.87
セマンティクスとは「データの意味」のことであり,
333デフォルトの名無しさん
垢版 |
2012/05/20(日) 00:55:25.53
適材適所
2012/05/20(日) 02:06:46.69
>>328
これって、聞いた話だと、とあるCPUにレジスタの値を+1するだけの特化命令があって
その命令に対応させるためだけに作った構文なんだってね

むかしは、構文木とかもメモリがないから、一行分づつに作って、マシンコードを生成してたから
そういう命令が必要だったんだとか
2012/05/20(日) 02:07:29.68
>>334
最後の行訂正
命令→構文
2012/05/20(日) 17:39:04.46
とあるも何も、大抵のCPUにはインクリメント命令ぐらいあるだろw
しかも、x += 1はステートメントじゃないしwバカすぎw
2012/05/20(日) 20:50:55.36
最近のCPUは特化命令としてはないんじゃないの?
もちろん、命令デコードの段階で判断して、高速に実行するだろうけど
2012/05/20(日) 22:27:28.71
昔のCPUと違って、アセンブラ用コードに一対一で対応したマシン語で実行してる訳じゃないからなあ。
2012/05/21(月) 10:04:58.26
++とか--が用意されたのは

「アドレスレジスタが指す領域の値を参照/更新したあと、アドレスレジスタをインクリメント/デクリメントする」

「アドレスレジスタをインクリメント/デクリメントしたあと、アドレスレジスタが指す領域の値を参照/更新する」

上記あたりを1命令で実行可能なCPU向けに
最適化とか無しに上記の命令へダイレクトに解釈されるプログラムを書けるよう
用意されたものだと思ってた
2012/05/22(火) 13:51:37.23
大昔のPDP-11の頃はそうだったかもしれない、けど、1980年頃にはどうでもよくなって
たんじゃないかと思うけど。

後置の場合に変化前の値が式の値のなる点を除いて。
2012/05/29(火) 17:23:56.80
-----------まとめ----------
「馬鹿は死なねば治らないのであり、だからこそアナトール・フランスは
『愚かな者は、邪悪な者よりも忌まわしい』と言ったのだ。
 邪悪な者は休むときがあるが、愚かな者はけっして休まないからである。」
(ホセ・オルテガ・イ・ガセット 1883〜1955)

http://toro.2ch.net/test/read.cgi/tech/1336122899/247
>ゲームは作らんから知らんが、
224 == 247 == 704 == 717 == http://logsoku.com/thread/toro.2ch.net/tech/1335361193/46
口癖はコンポジション、ミサイルとホーミングミサイルの設計について1ヶ月間も考え続けてる
http://toro.2ch.net/test/read.cgi/tech/1336122899/772
>ゲーム作らなくてもお前よりマトモ
タスクの実行順序を意識しないとゲームが作れない(笑)
http://toro.2ch.net/test/read.cgi/tech/1336122899/767
敵機 → プレイヤー の順序でタスクを実行するとタスクがぶっ壊れる
OOを得意げに語っているつもりが、やっている事が20年前のC言語だったという事実
バイナリの書き換えがわからない
コンパイラ言語のことをコンパイル言語とか言っちゃう
タイプミスの数々、右手の人差し指と中指をケガしてる模様
http://toro.2ch.net/test/read.cgi/tech/1336122899/190
http://toro.2ch.net/test/read.cgi/tech/1336122899/297
http://toro.2ch.net/test/read.cgi/tech/1325246820/837-839
http://toro.2ch.net/test/read.cgi/tech/1336122899/318-320
http://toro.2ch.net/test/read.cgi/tech/1336122899/332-334
http://toro.2ch.net/test/read.cgi/tech/1336122899/818
http://toro.2ch.net/test/read.cgi/tech/1336122899/956
2012/06/10(日) 15:05:39.81
なんで関数型の人は他パラダイムを全部「命令型」と呼ぶの?
こないだPrologまでリストに含めて「命令型」と呼んでる人がいて
ツナマヨ思いっきり噴いちゃったヨ
2012/06/10(日) 15:40:49.40
そいつが素人あるいはニワカなだけだろ
実際、そのカキコは誰からも相手にされていなかったしね
例外的な馬鹿一人をつかまえて、すべてが同じと考えるのもいかがなものかと
2012/06/10(日) 18:22:24.14
SQLは何言語になるのかね
345デフォルトの名無しさん
垢版 |
2012/06/11(月) 00:41:19.97
ドメイン特化言語
2012/06/11(月) 00:54:22.31
確かに関数型言語が汎用である必要は無いのかもね。
汎用言語って括りだと、コンピュータの動作原理を考えても、
やっぱ手続き型が主流になるのは目に見えてるしな。
SQLみたいに何かに特化してしまってよいのかも。
2012/06/11(月) 07:32:22.77
関数型言語はアホには理解できないという意味で
汎用的じゃないな
2012/06/11(月) 10:04:14.07
つまり研究用に細々と使われるのがお似合いということ
2012/06/11(月) 11:01:21.63
>>346
と言うか手続き型で全部やることすら本来なら旧世代の考え方かと
(それが今も濃く残っちゃってるのだけど)
インラインアセンブラみたいな形で
本質的に手順を必要とする部分は手続き型、本質的に式を必要とする部分は関数型、
本質的に論理を必要とする部分は論理型、ごく低レベルな処理を必要とする部分はアセンブラ…

ってやればいいのではないかと思う
2012/06/11(月) 12:21:30.96
普通にCとHaskellを組み合わせて使ってる
2012/06/11(月) 14:36:16.74
バカは、他人がみんなバカということにしないと気が済まないから、
>>348 のような発想を、よくするんだよな。
80年代に、BASICさえ使えれば万全、とか言い張ってた人にそっくりだ。
2012/06/11(月) 14:49:12.37
つまり関数型言語を理解出来ないバカは少数ということ

それなのにユーザーが少ないのは使えない玩具だから
2012/06/11(月) 22:01:54.26
>>352
自分がその少数のバカに属する気分はどう?
2012/06/12(火) 00:21:53.12
へたくそな煽り乙w
2012/06/12(火) 02:45:36.25
ふむ。関数型言語が理解できるって強がり言わないだけ素直でよろしい
バカの上に嘘つきで意地っ張りとか救いようが無いからね
2012/06/12(火) 04:39:45.80
関数型言語が理解できるって言うと、強がりになるの?
2012/06/12(火) 07:30:11.78
理解してない奴が言ったらそうなるだろう
関数型言語に限らずOOPLでも数学でも何でも
2012/06/12(火) 08:07:29.48
理解できない人って居るのかなぁ。
副作用がない分、簡単なんでしょ?
2012/06/12(火) 08:10:37.27
>>358
> 副作用がない分、簡単なんでしょ?

これ疑問系で訊くってことはお前は理解できてないんだろ

だから理解できない奴は居るよ。お前のことだよ
2012/06/12(火) 08:14:49.30
それ言ったらアセンブラだって簡単だよ
概念自体は理解できても、やりたいこと実現するとこまでいけないのが大概でしょ

手続き型でもそういう初心者が居るように
手続き型に慣れてても関数型という新たな概念に触れた人は関数型初心者になる
関数型のコードに慣れない内は「無理!わからん!」になるのは何らおかしくはない
2012/06/12(火) 08:26:28.97
でも関数型って基本的に手続き型から副作用を取ったものだから、
手続き型が出来れば関数型も出来るよ。
むしろ手続き型のほうがあれこれ副作用に頭を悩ませなければならないから
使いこなすのは難しいと思う。
そりゃ関数型で無理に副作用っぽい物を表現しようとすると難しいけど、
それは使い所を間違っているだけだからねぇ。
副作用を狙う箇所は手続きで書けば済む話だし。
2012/06/12(火) 08:49:01.07
ていうか OCaml 使えよ、っていう話だろ
2012/06/12(火) 08:57:59.08
だって、関数型が難しいって論調だったから。
2012/06/12(火) 13:09:44.45
ルーピーで関数型を気取られても
2012/06/12(火) 14:01:51.10
関数型って気取るものなのですか?
2012/06/12(火) 16:42:53.55
手続き型言語での状態書き換えを、「副作用」と呼ぶ事自体が迷走の始まり。
手続き型と同じアプローチで関数型言語を無理やり使おうとすると、関数型言語にとって副作用でしかないものが必要になるだけの事。
2012/06/12(火) 21:14:13.08
おっとScalaを勘違いして採用した現場の悪口はそこまでだ
2012/06/13(水) 08:57:32.35
勘違いして使ってりゃ、悲惨なことになるのは何でも同じだな。
2012/06/13(水) 11:53:02.19
>>367
Twitter社のことか
2012/06/13(水) 15:10:03.54
関数型コミュ、特にハスケラのdisり大好きっぷりを見ていると、
こいつらメジャーになったら速攻で内ゲバ始めるのが目に見えるから
距離を保つことにしたw
2012/06/13(水) 15:43:25.98
距離を保つも何も、お前が近づけたことなど一度も無いだろ
372uy
垢版 |
2012/06/13(水) 16:52:14.22
>>9

>関数型言語が普及しない理由 - 偏見プログラマの語り!
http://d.hatena.ne.jp/kura-replace/20111114/1321236695


これ、俺がググって偶然そいつのその記事見つけたとき
> というわけで本稿を書くわけですが(ヤメテ!そんな冷たい目で僕を見ないで!)、
>関数型言語*1についてはよく知りませんので、決して真に受ける事無く、
>オブジェクト指向言語をようやっと使っている底辺プログラマのぼやきということで了解いただければと思います。(ヤメテ!その前置きはズルイとか言わないで!)

この発言にブチギレそうになった奴の記事だわ


なんで>>9は明らかに初心者みたいな奴のブログ引用してんの?
引用に見せかけた晒し?

関数型はやっぱ流行らないな
2012/06/13(水) 17:11:51.61
22 :uy [sage] :2012/06/13(水) 16:53:41.38
 静的言語はゴミでしかない
2012/06/13(水) 17:48:08.37
>>366
手続き型言語には元々、「副作用」なんて無いしな。
あるのは、状態書き換え。
2012/06/13(水) 18:04:43.26
printfが標準出力に出力するのも状態書き換えっていうの?
2012/06/13(水) 18:12:03.08
最終的にはストレージの書き換えやパイプバッファの書き換えになるんじゃね
2012/06/13(水) 18:26:43.46
そこらへんひっくるめて値を返す以外のことは副作用と呼んだらすっきりしていいじゃないか
手続き型であっても有用な概念だ
2012/06/13(水) 20:54:59.93
>>371を読んでしまえば>>370に賛同するしかないだろうよ
2012/06/13(水) 21:13:42.39
>>378
2chで世間が判った気になり始めたら、色んな意味でヤバイな。
2012/06/14(木) 04:44:45.70
>>377
Prologをやってる立場から言うと、手続き型の中で副作用なんていって欲しくない。
2012/06/14(木) 14:26:02.56
>>379
2chで世間が判った気になって他人にヤバイなとか言ってるバカw
2012/06/14(木) 14:35:13.94
殴ったら殴り返されただけだろ?
どっちもどっちだよ
2012/06/14(木) 19:41:12.66
どうしてあんなにdisるのが大好きなんだろう?依存症?
2012/06/14(木) 20:41:54.00
uyはどっかのスレで、コテではいかに相手を苛立たせるかに心血を注いで、
普通の内容は名無しで書くみたいなことを言ってたな。
昔は単なる馬鹿だったが、最近は馬鹿の一つ覚えで○○も知らない奴らが〜○○位は当然〜みたいなことを言い出して、ウザさに磨きがかかってきたな。
2012/06/15(金) 08:59:39.61
自己紹介乙
386uy
垢版 |
2012/06/16(土) 22:40:20.04
each_slice
transpose
chunk
inject
cycle
すら使えない奴らって生きてる価値ないと思う
例えば
10.times.cycle do |n| p n end
によって0~9をプリントする処理を無限ループなわけだけど、貴様らちゃんと扱えていますか?
2012/06/17(日) 07:27:09.41
mapM_ print $ cycle [0..9]
2012/06/17(日) 17:03:14.91
javaやC#に代数的データ型を導入して欲しい
関数型言語を使う気にはなれないけど、あれの素晴らしさには反論出来ない
2012/08/12(日) 08:51:43.95
関数型の人たちって、どうしてあんなに上から目線でdisるのかな?
2012/08/12(日) 09:10:46.97
静的型付け型の人たちって、どうしてあんなに上から目線で(動的型付けを)disるのかな?
2012/08/12(日) 10:00:09.47
だって関数型言語を批判してる連中(の大部分)って
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
2012/08/12(日) 10:11:58.73
だって動的型付け言語を批判してる連中(の大部分)って
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
2012/08/13(月) 14:42:55.21
排他的なのは大抵ニワカ
2012/08/14(火) 13:10:19.50
上から目線とか言っちゃう人は、永遠に底辺にいればいいと思うんだ。
向上心が欠片もない人間を引き上げてやる義理は無い。
2012/08/14(火) 18:35:06.90
引き上げてやるだってwおもしろすぎww
2012/08/14(火) 18:50:19.67
自分の脳味噌を観察したほうが面白いと思うぞ
2012/08/16(木) 22:37:33.92
「上から目線」って言葉を聞いて「自分は上なんだ」と思うのがおもしろいんだが、そこが分からないとは…
2012/08/16(木) 22:48:13.95
上から目線と言い出す奴は
自分より下に居るんだなぁ、と思うだけだが
2012/08/17(金) 00:14:01.93
争いは同レベルの相手同士でなければ起き得ない(AA略
2012/08/17(金) 00:57:37.01
>>398
その発想が興味深いんだよ
2012/08/17(金) 18:52:27.57
バカが言う「興味深い」って、単に理解できてないだけだよなw
2012/08/18(土) 01:36:10.82
>>401
この場合の「上から目線」ってのは、馬鹿にされてるんだよ
2012/08/18(土) 07:43:41.89
バカに馬鹿にされても、何とも思わないけどな
2012/08/21(火) 19:37:20.38
バカにされているのは>>403だということに気付けw
2012/08/21(火) 19:50:03.82
ズレてね?
2012/08/21(火) 19:58:11.26
ズレてるよなw
407デフォルトの名無しさん
垢版 |
2012/10/21(日) 08:24:20.80
408デフォルトの名無しさん
垢版 |
2013/04/04(木) 12:53:10.94
軽量動的言語から来たけど
letとかのバインド?が何のために必要なのかわからない。
せっかく型推論で型記述しなくてすむのに意味なくない?
2013/04/04(木) 13:26:13.63
値の再利用と表現の簡潔化でしょ。
Don't Repeat Yourself的に。

letでも型の記述は(型推論できる式なら)いらないし。
2013/04/04(木) 13:38:08.65
何度も評価するより1度の評価で済むほうが速いだろw
2013/04/04(木) 23:30:06.56
一文字でも少なくタイプしたいなら ruby やってろ
っていう話じゃないの
412デフォルトの名無しさん
垢版 |
2013/04/05(金) 00:10:33.03
let無しだと構文解析のルールがとても複雑になるんだな〜
413デフォルトの名無しさん
垢版 |
2013/06/20(木) 19:42:10.61
関数型言語ってループは末尾再帰で書くんですよね?
それってループするために関数定義の為に名前を消費する必要があるってことですか?
その、べつにそれがいいとか悪いとか言うんじゃなくて、単純に気になっただけなんですけど。
2013/06/20(木) 20:25:36.29
たいていは通用範囲がローカルなかたちで名前をつけることができるから問題ない
2013/06/20(木) 21:24:23.61
>>413
>関数型言語ってループは末尾再帰で書くんですよね?

関数型言語の原理、というか計算モデルという視点であれば、その認識は正しい

>それってループするために関数定義の為に名前を消費する必要があるってことですか?

関数型言語では(数値や文字列と同様に)関数そのものも式の要素になる
言い換えると、関数の引数として関数を渡したり、関数の戻り値も関数として定義でき、
こういった関数の使い方は「高階関数」と呼ばれている

一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
(手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い

高階関数の代表例にはリスト処理を提供する List.map, List.filter, List.fold があり、
たとえば Ruby では以下に示すようにモジュール Enumerable のメソッドとして定義されている

・List.map -> Enumuerable#map
・List.filter -> Enumerble#select, Enumerable#reject
・List.fold -> Enumerble#inject
2013/06/20(木) 21:58:56.06
ある集合の各要素へ、ある関数を適用した場合の、新たな集合を知るのがループの目的であるならば、
最初の集合と適用する関数を記述するだけで結果の集合を得られるので、他の言語のように何をするにもforループを書く的な書き方はあまりしない。
417415
垢版 |
2013/06/20(木) 22:09:07.44
>>415では肝心な事を書き忘れていたので追記する

>>413も知っているように関数には名前を付けることができて、
これは「関数を定義する」と呼ばれることが多い
同時に、関数型言語には「無名関数」と呼ばれる概念があり、
「ラムダ式」あるいは「関数式」とも呼ばれる
つまり、(>>415で述べた)高階関数へ渡す関数や戻り値としての関数には
この無名関数を使えばいいから、無駄な名前を消費せずにプログラミングできることになる

たとえば Standard ML という関数型言語では、無名関数の文法は「fn <引数> => 式」であり、
その無名関数をリスト処理関数 map へ渡すサンプルコードは以下の様になる

 - map (fn x => x + 1) [1, 2, 3];
 > val it = [2, 3, 4] : int list

Ruby であれば、以下のように書く

 irb(main):001:0> [1, 2, 3].map { |x| x + 1 }
 => [2, 3, 4]
2013/06/21(金) 00:40:31.57
>>414-417
回答ありがとうございます。

>>417
自分も無名関数についてはある程度知っていました。
Cのqsort関数なんかを使う時に、lambdaで直接関数を渡せたらいいななんて思うこともあります。
まあ、Cをアセンブリ言語のマクロと考えれば、欲張らない仕様の方がいいんでしょうけど。

そんなことを考えている時に、無名関数という仕様を持っている関数型言語でさえ、結局のところ、
余計な名前を使わなきゃならない場面があるのかと疑問に思って質問させて頂きました。
# 自分は関数名を考える作業があまり好きではないので。

>>414さんや>>416さんの話で関数型言語を使う人の意識というか感覚みたいなものが多少判ったような気がします。
「そんなことを気にする場面ってあんまりないよ」ってことだと思うのですが、それは

> 一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
> このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
> (手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い

ということだからってことですね。
いろんな観点でのコメントがもらえて勉強になりました。
ありがとうございました。
2013/06/21(金) 01:28:15.65
lambda だけで再帰はむりかと
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。