前スレ
http://toro.2ch.net/test/read.cgi/tech/1320743217/
【アンチ】関数型言語は使えない【玩具】 2
■ このスレッドは過去ログ倉庫に格納されています
2012/02/28(火) 20:45:47.95
331デフォルトの名無しさん
2012/04/17(火) 02:39:26.84 リーナスがこのスレに書き込みしてるのか?
332デフォルトの名無しさん
2012/05/11(金) 10:24:30.87 セマンティクスとは「データの意味」のことであり,
333デフォルトの名無しさん
2012/05/20(日) 00:55:25.53 適材適所
334デフォルトの名無しさん
2012/05/20(日) 02:06:46.69 >>328
これって、聞いた話だと、とあるCPUにレジスタの値を+1するだけの特化命令があって
その命令に対応させるためだけに作った構文なんだってね
むかしは、構文木とかもメモリがないから、一行分づつに作って、マシンコードを生成してたから
そういう命令が必要だったんだとか
これって、聞いた話だと、とあるCPUにレジスタの値を+1するだけの特化命令があって
その命令に対応させるためだけに作った構文なんだってね
むかしは、構文木とかもメモリがないから、一行分づつに作って、マシンコードを生成してたから
そういう命令が必要だったんだとか
335デフォルトの名無しさん
2012/05/20(日) 02:07:29.68336デフォルトの名無しさん
2012/05/20(日) 17:39:04.46 とあるも何も、大抵のCPUにはインクリメント命令ぐらいあるだろw
しかも、x += 1はステートメントじゃないしwバカすぎw
しかも、x += 1はステートメントじゃないしwバカすぎw
337デフォルトの名無しさん
2012/05/20(日) 20:50:55.36 最近のCPUは特化命令としてはないんじゃないの?
もちろん、命令デコードの段階で判断して、高速に実行するだろうけど
もちろん、命令デコードの段階で判断して、高速に実行するだろうけど
338デフォルトの名無しさん
2012/05/20(日) 22:27:28.71 昔のCPUと違って、アセンブラ用コードに一対一で対応したマシン語で実行してる訳じゃないからなあ。
339デフォルトの名無しさん
2012/05/21(月) 10:04:58.26 ++とか--が用意されたのは
「アドレスレジスタが指す領域の値を参照/更新したあと、アドレスレジスタをインクリメント/デクリメントする」
「アドレスレジスタをインクリメント/デクリメントしたあと、アドレスレジスタが指す領域の値を参照/更新する」
上記あたりを1命令で実行可能なCPU向けに
最適化とか無しに上記の命令へダイレクトに解釈されるプログラムを書けるよう
用意されたものだと思ってた
「アドレスレジスタが指す領域の値を参照/更新したあと、アドレスレジスタをインクリメント/デクリメントする」
「アドレスレジスタをインクリメント/デクリメントしたあと、アドレスレジスタが指す領域の値を参照/更新する」
上記あたりを1命令で実行可能なCPU向けに
最適化とか無しに上記の命令へダイレクトに解釈されるプログラムを書けるよう
用意されたものだと思ってた
340デフォルトの名無しさん
2012/05/22(火) 13:51:37.23 大昔のPDP-11の頃はそうだったかもしれない、けど、1980年頃にはどうでもよくなって
たんじゃないかと思うけど。
後置の場合に変化前の値が式の値のなる点を除いて。
たんじゃないかと思うけど。
後置の場合に変化前の値が式の値のなる点を除いて。
341デフォルトの名無しさん
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
「馬鹿は死なねば治らないのであり、だからこそアナトール・フランスは
『愚かな者は、邪悪な者よりも忌まわしい』と言ったのだ。
邪悪な者は休むときがあるが、愚かな者はけっして休まないからである。」
(ホセ・オルテガ・イ・ガセット 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
342デフォルトの名無しさん
2012/06/10(日) 15:05:39.81 なんで関数型の人は他パラダイムを全部「命令型」と呼ぶの?
こないだPrologまでリストに含めて「命令型」と呼んでる人がいて
ツナマヨ思いっきり噴いちゃったヨ
こないだPrologまでリストに含めて「命令型」と呼んでる人がいて
ツナマヨ思いっきり噴いちゃったヨ
343デフォルトの名無しさん
2012/06/10(日) 15:40:49.40 そいつが素人あるいはニワカなだけだろ
実際、そのカキコは誰からも相手にされていなかったしね
例外的な馬鹿一人をつかまえて、すべてが同じと考えるのもいかがなものかと
実際、そのカキコは誰からも相手にされていなかったしね
例外的な馬鹿一人をつかまえて、すべてが同じと考えるのもいかがなものかと
344デフォルトの名無しさん
2012/06/10(日) 18:22:24.14 SQLは何言語になるのかね
345デフォルトの名無しさん
2012/06/11(月) 00:41:19.97 ドメイン特化言語
346デフォルトの名無しさん
2012/06/11(月) 00:54:22.31 確かに関数型言語が汎用である必要は無いのかもね。
汎用言語って括りだと、コンピュータの動作原理を考えても、
やっぱ手続き型が主流になるのは目に見えてるしな。
SQLみたいに何かに特化してしまってよいのかも。
汎用言語って括りだと、コンピュータの動作原理を考えても、
やっぱ手続き型が主流になるのは目に見えてるしな。
SQLみたいに何かに特化してしまってよいのかも。
347デフォルトの名無しさん
2012/06/11(月) 07:32:22.77 関数型言語はアホには理解できないという意味で
汎用的じゃないな
汎用的じゃないな
348デフォルトの名無しさん
2012/06/11(月) 10:04:14.07 つまり研究用に細々と使われるのがお似合いということ
349デフォルトの名無しさん
2012/06/11(月) 11:01:21.63 >>346
と言うか手続き型で全部やることすら本来なら旧世代の考え方かと
(それが今も濃く残っちゃってるのだけど)
インラインアセンブラみたいな形で
本質的に手順を必要とする部分は手続き型、本質的に式を必要とする部分は関数型、
本質的に論理を必要とする部分は論理型、ごく低レベルな処理を必要とする部分はアセンブラ…
ってやればいいのではないかと思う
と言うか手続き型で全部やることすら本来なら旧世代の考え方かと
(それが今も濃く残っちゃってるのだけど)
インラインアセンブラみたいな形で
本質的に手順を必要とする部分は手続き型、本質的に式を必要とする部分は関数型、
本質的に論理を必要とする部分は論理型、ごく低レベルな処理を必要とする部分はアセンブラ…
ってやればいいのではないかと思う
350デフォルトの名無しさん
2012/06/11(月) 12:21:30.96 普通にCとHaskellを組み合わせて使ってる
351デフォルトの名無しさん
2012/06/11(月) 14:36:16.74352デフォルトの名無しさん
2012/06/11(月) 14:49:12.37 つまり関数型言語を理解出来ないバカは少数ということ
それなのにユーザーが少ないのは使えない玩具だから
それなのにユーザーが少ないのは使えない玩具だから
353デフォルトの名無しさん
2012/06/11(月) 22:01:54.26 >>352
自分がその少数のバカに属する気分はどう?
自分がその少数のバカに属する気分はどう?
354デフォルトの名無しさん
2012/06/12(火) 00:21:53.12 へたくそな煽り乙w
355デフォルトの名無しさん
2012/06/12(火) 02:45:36.25 ふむ。関数型言語が理解できるって強がり言わないだけ素直でよろしい
バカの上に嘘つきで意地っ張りとか救いようが無いからね
バカの上に嘘つきで意地っ張りとか救いようが無いからね
356デフォルトの名無しさん
2012/06/12(火) 04:39:45.80 関数型言語が理解できるって言うと、強がりになるの?
357デフォルトの名無しさん
2012/06/12(火) 07:30:11.78 理解してない奴が言ったらそうなるだろう
関数型言語に限らずOOPLでも数学でも何でも
関数型言語に限らずOOPLでも数学でも何でも
358デフォルトの名無しさん
2012/06/12(火) 08:07:29.48 理解できない人って居るのかなぁ。
副作用がない分、簡単なんでしょ?
副作用がない分、簡単なんでしょ?
359デフォルトの名無しさん
2012/06/12(火) 08:10:37.27360デフォルトの名無しさん
2012/06/12(火) 08:14:49.30 それ言ったらアセンブラだって簡単だよ
概念自体は理解できても、やりたいこと実現するとこまでいけないのが大概でしょ
手続き型でもそういう初心者が居るように
手続き型に慣れてても関数型という新たな概念に触れた人は関数型初心者になる
関数型のコードに慣れない内は「無理!わからん!」になるのは何らおかしくはない
概念自体は理解できても、やりたいこと実現するとこまでいけないのが大概でしょ
手続き型でもそういう初心者が居るように
手続き型に慣れてても関数型という新たな概念に触れた人は関数型初心者になる
関数型のコードに慣れない内は「無理!わからん!」になるのは何らおかしくはない
361デフォルトの名無しさん
2012/06/12(火) 08:26:28.97 でも関数型って基本的に手続き型から副作用を取ったものだから、
手続き型が出来れば関数型も出来るよ。
むしろ手続き型のほうがあれこれ副作用に頭を悩ませなければならないから
使いこなすのは難しいと思う。
そりゃ関数型で無理に副作用っぽい物を表現しようとすると難しいけど、
それは使い所を間違っているだけだからねぇ。
副作用を狙う箇所は手続きで書けば済む話だし。
手続き型が出来れば関数型も出来るよ。
むしろ手続き型のほうがあれこれ副作用に頭を悩ませなければならないから
使いこなすのは難しいと思う。
そりゃ関数型で無理に副作用っぽい物を表現しようとすると難しいけど、
それは使い所を間違っているだけだからねぇ。
副作用を狙う箇所は手続きで書けば済む話だし。
362デフォルトの名無しさん
2012/06/12(火) 08:49:01.07 ていうか OCaml 使えよ、っていう話だろ
363デフォルトの名無しさん
2012/06/12(火) 08:57:59.08 だって、関数型が難しいって論調だったから。
364デフォルトの名無しさん
2012/06/12(火) 13:09:44.45 ルーピーで関数型を気取られても
365デフォルトの名無しさん
2012/06/12(火) 14:01:51.10 関数型って気取るものなのですか?
366デフォルトの名無しさん
2012/06/12(火) 16:42:53.55 手続き型言語での状態書き換えを、「副作用」と呼ぶ事自体が迷走の始まり。
手続き型と同じアプローチで関数型言語を無理やり使おうとすると、関数型言語にとって副作用でしかないものが必要になるだけの事。
手続き型と同じアプローチで関数型言語を無理やり使おうとすると、関数型言語にとって副作用でしかないものが必要になるだけの事。
367デフォルトの名無しさん
2012/06/12(火) 21:14:13.08 おっとScalaを勘違いして採用した現場の悪口はそこまでだ
368デフォルトの名無しさん
2012/06/13(水) 08:57:32.35 勘違いして使ってりゃ、悲惨なことになるのは何でも同じだな。
369デフォルトの名無しさん
2012/06/13(水) 11:53:02.19 >>367
Twitter社のことか
Twitter社のことか
370デフォルトの名無しさん
2012/06/13(水) 15:10:03.54 関数型コミュ、特にハスケラのdisり大好きっぷりを見ていると、
こいつらメジャーになったら速攻で内ゲバ始めるのが目に見えるから
距離を保つことにしたw
こいつらメジャーになったら速攻で内ゲバ始めるのが目に見えるから
距離を保つことにしたw
371デフォルトの名無しさん
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は明らかに初心者みたいな奴のブログ引用してんの?
引用に見せかけた晒し?
関数型はやっぱ流行らないな
の
>関数型言語が普及しない理由 - 偏見プログラマの語り!
>http://d.hatena.ne.jp/kura-replace/20111114/1321236695
これ、俺がググって偶然そいつのその記事見つけたとき
> というわけで本稿を書くわけですが(ヤメテ!そんな冷たい目で僕を見ないで!)、
>関数型言語*1についてはよく知りませんので、決して真に受ける事無く、
>オブジェクト指向言語をようやっと使っている底辺プログラマのぼやきということで了解いただければと思います。(ヤメテ!その前置きはズルイとか言わないで!)
この発言にブチギレそうになった奴の記事だわ
なんで>>9は明らかに初心者みたいな奴のブログ引用してんの?
引用に見せかけた晒し?
関数型はやっぱ流行らないな
373デフォルトの名無しさん
2012/06/13(水) 17:11:51.61 22 :uy [sage] :2012/06/13(水) 16:53:41.38
静的言語はゴミでしかない
静的言語はゴミでしかない
374デフォルトの名無しさん
2012/06/13(水) 17:48:08.37375デフォルトの名無しさん
2012/06/13(水) 18:04:43.26 printfが標準出力に出力するのも状態書き換えっていうの?
376デフォルトの名無しさん
2012/06/13(水) 18:12:03.08 最終的にはストレージの書き換えやパイプバッファの書き換えになるんじゃね
377デフォルトの名無しさん
2012/06/13(水) 18:26:43.46 そこらへんひっくるめて値を返す以外のことは副作用と呼んだらすっきりしていいじゃないか
手続き型であっても有用な概念だ
手続き型であっても有用な概念だ
378デフォルトの名無しさん
2012/06/13(水) 20:54:59.93379デフォルトの名無しさん
2012/06/13(水) 21:13:42.39 >>378
2chで世間が判った気になり始めたら、色んな意味でヤバイな。
2chで世間が判った気になり始めたら、色んな意味でヤバイな。
381デフォルトの名無しさん
2012/06/14(木) 14:26:02.56382デフォルトの名無しさん
2012/06/14(木) 14:35:13.94 殴ったら殴り返されただけだろ?
どっちもどっちだよ
どっちもどっちだよ
383デフォルトの名無しさん
2012/06/14(木) 19:41:12.66 どうしてあんなにdisるのが大好きなんだろう?依存症?
384デフォルトの名無しさん
2012/06/14(木) 20:41:54.00 uyはどっかのスレで、コテではいかに相手を苛立たせるかに心血を注いで、
普通の内容は名無しで書くみたいなことを言ってたな。
昔は単なる馬鹿だったが、最近は馬鹿の一つ覚えで○○も知らない奴らが〜○○位は当然〜みたいなことを言い出して、ウザさに磨きがかかってきたな。
普通の内容は名無しで書くみたいなことを言ってたな。
昔は単なる馬鹿だったが、最近は馬鹿の一つ覚えで○○も知らない奴らが〜○○位は当然〜みたいなことを言い出して、ウザさに磨きがかかってきたな。
385デフォルトの名無しさん
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をプリントする処理を無限ループなわけだけど、貴様らちゃんと扱えていますか?
transpose
chunk
inject
cycle
すら使えない奴らって生きてる価値ないと思う
例えば
10.times.cycle do |n| p n end
によって0~9をプリントする処理を無限ループなわけだけど、貴様らちゃんと扱えていますか?
387デフォルトの名無しさん
2012/06/17(日) 07:27:09.41 mapM_ print $ cycle [0..9]
388デフォルトの名無しさん
2012/06/17(日) 17:03:14.91 javaやC#に代数的データ型を導入して欲しい
関数型言語を使う気にはなれないけど、あれの素晴らしさには反論出来ない
関数型言語を使う気にはなれないけど、あれの素晴らしさには反論出来ない
389デフォルトの名無しさん
2012/08/12(日) 08:51:43.95 関数型の人たちって、どうしてあんなに上から目線でdisるのかな?
390デフォルトの名無しさん
2012/08/12(日) 09:10:46.97 静的型付け型の人たちって、どうしてあんなに上から目線で(動的型付けを)disるのかな?
391デフォルトの名無しさん
2012/08/12(日) 10:00:09.47 だって関数型言語を批判してる連中(の大部分)って
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
392デフォルトの名無しさん
2012/08/12(日) 10:11:58.73 だって動的型付け言語を批判してる連中(の大部分)って
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
物凄く低能で、批判も的を射てないんだもん。
しかも批判しといて反論されたら上から目線でdisるな、とか言い出すし。
ホント馬鹿の上に品性まで劣ってるよな。
393デフォルトの名無しさん
2012/08/13(月) 14:42:55.21 排他的なのは大抵ニワカ
394デフォルトの名無しさん
2012/08/14(火) 13:10:19.50 上から目線とか言っちゃう人は、永遠に底辺にいればいいと思うんだ。
向上心が欠片もない人間を引き上げてやる義理は無い。
向上心が欠片もない人間を引き上げてやる義理は無い。
395デフォルトの名無しさん
2012/08/14(火) 18:35:06.90 引き上げてやるだってwおもしろすぎww
396デフォルトの名無しさん
2012/08/14(火) 18:50:19.67 自分の脳味噌を観察したほうが面白いと思うぞ
397デフォルトの名無しさん
2012/08/16(木) 22:37:33.92 「上から目線」って言葉を聞いて「自分は上なんだ」と思うのがおもしろいんだが、そこが分からないとは…
398デフォルトの名無しさん
2012/08/16(木) 22:48:13.95 上から目線と言い出す奴は
自分より下に居るんだなぁ、と思うだけだが
自分より下に居るんだなぁ、と思うだけだが
399デフォルトの名無しさん
2012/08/17(金) 00:14:01.93 争いは同レベルの相手同士でなければ起き得ない(AA略
400デフォルトの名無しさん
2012/08/17(金) 00:57:37.01 >>398
その発想が興味深いんだよ
その発想が興味深いんだよ
401デフォルトの名無しさん
2012/08/17(金) 18:52:27.57 バカが言う「興味深い」って、単に理解できてないだけだよなw
402デフォルトの名無しさん
2012/08/18(土) 01:36:10.82 >>401
この場合の「上から目線」ってのは、馬鹿にされてるんだよ
この場合の「上から目線」ってのは、馬鹿にされてるんだよ
403デフォルトの名無しさん
2012/08/18(土) 07:43:41.89 バカに馬鹿にされても、何とも思わないけどな
404デフォルトの名無しさん
2012/08/21(火) 19:37:20.38 バカにされているのは>>403だということに気付けw
405デフォルトの名無しさん
2012/08/21(火) 19:50:03.82 ズレてね?
406デフォルトの名無しさん
2012/08/21(火) 19:58:11.26 ズレてるよなw
407デフォルトの名無しさん
2012/10/21(日) 08:24:20.80408デフォルトの名無しさん
2013/04/04(木) 12:53:10.94 軽量動的言語から来たけど
letとかのバインド?が何のために必要なのかわからない。
せっかく型推論で型記述しなくてすむのに意味なくない?
letとかのバインド?が何のために必要なのかわからない。
せっかく型推論で型記述しなくてすむのに意味なくない?
409デフォルトの名無しさん
2013/04/04(木) 13:26:13.63 値の再利用と表現の簡潔化でしょ。
Don't Repeat Yourself的に。
letでも型の記述は(型推論できる式なら)いらないし。
Don't Repeat Yourself的に。
letでも型の記述は(型推論できる式なら)いらないし。
410デフォルトの名無しさん
2013/04/04(木) 13:38:08.65 何度も評価するより1度の評価で済むほうが速いだろw
411デフォルトの名無しさん
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 関数型言語ってループは末尾再帰で書くんですよね?
それってループするために関数定義の為に名前を消費する必要があるってことですか?
その、べつにそれがいいとか悪いとか言うんじゃなくて、単純に気になっただけなんですけど。
それってループするために関数定義の為に名前を消費する必要があるってことですか?
その、べつにそれがいいとか悪いとか言うんじゃなくて、単純に気になっただけなんですけど。
414デフォルトの名無しさん
2013/06/20(木) 20:25:36.29 たいていは通用範囲がローカルなかたちで名前をつけることができるから問題ない
415デフォルトの名無しさん
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
>関数型言語ってループは末尾再帰で書くんですよね?
関数型言語の原理、というか計算モデルという視点であれば、その認識は正しい
>それってループするために関数定義の為に名前を消費する必要があるってことですか?
関数型言語では(数値や文字列と同様に)関数そのものも式の要素になる
言い換えると、関数の引数として関数を渡したり、関数の戻り値も関数として定義でき、
こういった関数の使い方は「高階関数」と呼ばれている
一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
(手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い
高階関数の代表例にはリスト処理を提供する List.map, List.filter, List.fold があり、
たとえば Ruby では以下に示すようにモジュール Enumerable のメソッドとして定義されている
・List.map -> Enumuerable#map
・List.filter -> Enumerble#select, Enumerable#reject
・List.fold -> Enumerble#inject
416デフォルトの名無しさん
2013/06/20(木) 21:58:56.06 ある集合の各要素へ、ある関数を適用した場合の、新たな集合を知るのがループの目的であるならば、
最初の集合と適用する関数を記述するだけで結果の集合を得られるので、他の言語のように何をするにもforループを書く的な書き方はあまりしない。
最初の集合と適用する関数を記述するだけで結果の集合を得られるので、他の言語のように何をするにも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]
>>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]
418デフォルトの名無しさん
2013/06/21(金) 00:40:31.57 >>414-417
回答ありがとうございます。
>>417
自分も無名関数についてはある程度知っていました。
Cのqsort関数なんかを使う時に、lambdaで直接関数を渡せたらいいななんて思うこともあります。
まあ、Cをアセンブリ言語のマクロと考えれば、欲張らない仕様の方がいいんでしょうけど。
そんなことを考えている時に、無名関数という仕様を持っている関数型言語でさえ、結局のところ、
余計な名前を使わなきゃならない場面があるのかと疑問に思って質問させて頂きました。
# 自分は関数名を考える作業があまり好きではないので。
>>414さんや>>416さんの話で関数型言語を使う人の意識というか感覚みたいなものが多少判ったような気がします。
「そんなことを気にする場面ってあんまりないよ」ってことだと思うのですが、それは
> 一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
> このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
> (手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い
ということだからってことですね。
いろんな観点でのコメントがもらえて勉強になりました。
ありがとうございました。
回答ありがとうございます。
>>417
自分も無名関数についてはある程度知っていました。
Cのqsort関数なんかを使う時に、lambdaで直接関数を渡せたらいいななんて思うこともあります。
まあ、Cをアセンブリ言語のマクロと考えれば、欲張らない仕様の方がいいんでしょうけど。
そんなことを考えている時に、無名関数という仕様を持っている関数型言語でさえ、結局のところ、
余計な名前を使わなきゃならない場面があるのかと疑問に思って質問させて頂きました。
# 自分は関数名を考える作業があまり好きではないので。
>>414さんや>>416さんの話で関数型言語を使う人の意識というか感覚みたいなものが多少判ったような気がします。
「そんなことを気にする場面ってあんまりないよ」ってことだと思うのですが、それは
> 一般に関数型言語には、この高階関数を応用したライブラリが標準で付属しており、
> このライブラリ関数を利用する事によって、多くのケースでは関数再帰を意識せず
> (手続き型言語における)ループ処理をプログラミングできるし、無駄な名前の消費も無い
ということだからってことですね。
いろんな観点でのコメントがもらえて勉強になりました。
ありがとうございました。
419デフォルトの名無しさん
2013/06/21(金) 01:28:15.65 lambda だけで再帰はむりかと
420デフォルトの名無しさん
2013/06/21(金) 04:09:08.96 でもYコンビネータなら?
421デフォルトの名無しさん
2013/06/21(金) 10:44:44.88 (λf . (λx . f (x x)) (λx . f (x x)))
422デフォルトの名無しさん
2013/06/21(金) 11:37:03.55 >>420
評価器による。正規なら記述可能。
評価器による。正規なら記述可能。
423デフォルトの名無しさん
2013/06/22(土) 17:48:31.52 >>422
> >>420
> 評価器による。正規なら記述可能。
CurryのYコンビネーター(そのλ式による表現は421にある通り)はどんな評価戦略でもリダクションだけでは進まない(逆向き、つまり一般のconversionが必要)。
しかし例えばTuringのΘコンビネーター(詳しくはBarendregtの百科事典を見ろ)ならば評価戦略がnormal orderの場合にはリダクションで再帰を表すことができる。
更にapplicative orderのリダクション戦略(かつλ束縛の本体にはリダクションが入らないweak戦略)という通常のcall-by-value関数的プログラミング言語の
評価戦略でも、λ束縛つまり高階関数によって再帰を表現する事は可能。FriedmanらのSeasoned Schemerに答えが書いてある。
つまり現実のSchemeを用いた関数的プログラミングで再帰呼び出しを完全に消しさることは実際に可能ってことだ。
> >>420
> 評価器による。正規なら記述可能。
CurryのYコンビネーター(そのλ式による表現は421にある通り)はどんな評価戦略でもリダクションだけでは進まない(逆向き、つまり一般のconversionが必要)。
しかし例えばTuringのΘコンビネーター(詳しくはBarendregtの百科事典を見ろ)ならば評価戦略がnormal orderの場合にはリダクションで再帰を表すことができる。
更にapplicative orderのリダクション戦略(かつλ束縛の本体にはリダクションが入らないweak戦略)という通常のcall-by-value関数的プログラミング言語の
評価戦略でも、λ束縛つまり高階関数によって再帰を表現する事は可能。FriedmanらのSeasoned Schemerに答えが書いてある。
つまり現実のSchemeを用いた関数的プログラミングで再帰呼び出しを完全に消しさることは実際に可能ってことだ。
424デフォルトの名無しさん
2013/06/22(土) 20:12:46.50 >>423
「リダクションだけでは進まない」って何を指して言ってる?
y fを評価していってもf (y f)と構文的に同じにならないってこと?
再帰を記述するのが目的ならそれは別に必要ないんじゃね
import Unsafe.Coerce
main = print $ y (9:)
y :: (a -> a) -> a
y = \f -> (\x -> f (unsafeCoerce x x)) (\x -> f (unsafeCoerce x x))
「リダクションだけでは進まない」って何を指して言ってる?
y fを評価していってもf (y f)と構文的に同じにならないってこと?
再帰を記述するのが目的ならそれは別に必要ないんじゃね
import Unsafe.Coerce
main = print $ y (9:)
y :: (a -> a) -> a
y = \f -> (\x -> f (unsafeCoerce x x)) (\x -> f (unsafeCoerce x x))
425デフォルトの名無しさん
2013/06/23(日) 18:49:02.67426デフォルトの名無しさん
2013/06/23(日) 19:48:23.59427デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN プログラム言語における関数型言語っていうのは
OSにおけるLinuxみたいなものだと思っている
何年も前からユーザは「これからは関数型言語(Linux)の時代」と連呼しているのに
まったく流行しない。またユーザーは関数型言語(Linux)を使う事がカッコいいと信じているw
OSにおけるLinuxみたいなものだと思っている
何年も前からユーザは「これからは関数型言語(Linux)の時代」と連呼しているのに
まったく流行しない。またユーザーは関数型言語(Linux)を使う事がカッコいいと信じているw
428デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN Windows信者のバカ君が今度はココに沸いたw
429デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN LinuxじゃなくてMacみたいな感じをうけるけどな
430デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN 今時Mac信者で、Mac OSとLinuxが、どちらもUnix系という同類であることを知らないなんて、
相当のバカだぞ?
……相当のバカなのかw
相当のバカだぞ?
……相当のバカなのかw
431デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN おまえはなにをいっているんだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★7 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【食】「シャウエッセンは焼くべからず」暗黙のルールを破り売上高過去最高…日本ハム社員たちが「夜味」にかけた情熱 [ぐれ★]
- 歴代日本総理大臣で良かった人は誰?
- __先に言っておくと、ワイはマトリックスのネオやから [827565401]
- 死にたい
- ニュース「日中関係の冷え込み」
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 国民「物価高なんとかして」自民党「デフレ脱却!」
