前スレ
http://toro.2ch.net/test/read.cgi/tech/1320743217/
【アンチ】関数型言語は使えない【玩具】 2
■ このスレッドは過去ログ倉庫に格納されています
2012/02/28(火) 20:45:47.95
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 おまえはなにをいっているんだ
432デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN そんなわかりきったことをドヤ顔で講釈する>>430って…
433デフォルトの名無しさん
2013/09/02(月) 10:09:50.80434デフォルトの名無しさん
2013/09/02(月) 14:43:34.87 で、流行でしかモノを判断できない奴の使っている言語はなんなんだ?
435デフォルトの名無しさん
2013/09/02(月) 15:56:05.57 サンデープログラマーだから
業界で関数型が流行ってるって事すらわからん
業界で関数型が流行ってるって事すらわからん
436デフォルトの名無しさん
2013/09/02(月) 16:01:31.04 JavaScriptって関数型言語とも見れる???
437デフォルトの名無しさん
2013/09/02(月) 16:10:50.92 >>436
そんなこと言い出したらCでも関数型プログラミングはできる
そんなこと言い出したらCでも関数型プログラミングはできる
438デフォルトの名無しさん
2013/09/02(月) 16:18:46.45 いや、そういうマクロ的屁理屈じゃなくて
ラムダ式とか第一級関数とか、前向きな機能揃ってるんじゃないかなあと思って
ラムダ式とか第一級関数とか、前向きな機能揃ってるんじゃないかなあと思って
439デフォルトの名無しさん
2013/09/02(月) 16:21:38.70 >>436
いまさら
いまさら
440デフォルトの名無しさん
2013/09/02(月) 16:21:53.27 関数型プログラミングならどの言語でもできる
関数型言語と呼ばれるのは関数型プログラミング「しか」できない言語だ
だから「使えない」と烙印を押される
JavaScriptはそうじゃないだろう?
関数型言語と呼ばれるのは関数型プログラミング「しか」できない言語だ
だから「使えない」と烙印を押される
JavaScriptはそうじゃないだろう?
441デフォルトの名無しさん
2013/09/02(月) 16:23:20.07 また意味不明な論理が来ました。
Haskell以外に『関数型プログラミング「しか」できない言語』ってあるか?
Haskell以外に『関数型プログラミング「しか」できない言語』ってあるか?
442デフォルトの名無しさん
2013/09/02(月) 16:24:26.89443デフォルトの名無しさん
2013/09/02(月) 16:38:50.97 度合いを日本語で語るとかプログラマの恥。
勘違いして欲しくないんなら数値で語れ。
勘違いして欲しくないんなら数値で語れ。
444デフォルトの名無しさん
2013/09/02(月) 16:40:41.13 言語を作った人が「これは関数型だ」と言い張れば関数型になる。
そうでないなら外野があれこれ言うのは野暮というものだろう。
そうでないなら外野があれこれ言うのは野暮というものだろう。
■ このスレッドは過去ログ倉庫に格納されています
