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

■ このスレッドは過去ログ倉庫に格納されています
2012/02/28(火) 20:45:47.95
前スレ
http://toro.2ch.net/test/read.cgi/tech/1320743217/
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 だけで再帰はむりかと
2013/06/21(金) 04:09:08.96
でもYコンビネータなら?
2013/06/21(金) 10:44:44.88
(λf . (λx . f (x x)) (λx . f (x x)))
2013/06/21(金) 11:37:03.55
>>420
評価器による。正規なら記述可能。
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を用いた関数的プログラミングで再帰呼び出しを完全に消しさることは実際に可能ってことだ。
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))
2013/06/23(日) 18:49:02.67
>>424
> >>423
> 「リダクションだけでは進まない」って何を指して言ってる?
> y fを評価していってもf (y f)と構文的に同じにならないってこと?

(λx..M)N → Mの中の自由なxをNで置き換えた項

という一種の書き換えによって左から右へと進めるのがリダクション。
この左から右への向きだけではYfからスタートしてf(Yf)は得られないということ。

カリーのYでなくチューリングのΘを用いて最左最外のリデックスをリダクションする正規戦略ならば
Θfからスタートしてf(Θf)までリダクションだけで辿り着くことが可能。
2013/06/23(日) 19:48:23.59
>>425
再帰をするのが目的ならf (Y f)を得る必要はないよね
なんか適当な意味論のもとでY fがf (Y f)と同じになればいい
2013/08/28(水) NY:AN:NY.AN
プログラム言語における関数型言語っていうのは
OSにおけるLinuxみたいなものだと思っている

何年も前からユーザは「これからは関数型言語(Linux)の時代」と連呼しているのに
まったく流行しない。またユーザーは関数型言語(Linux)を使う事がカッコいいと信じているw
2013/08/28(水) NY:AN:NY.AN
Windows信者のバカ君が今度はココに沸いたw
2013/08/28(水) NY:AN:NY.AN
LinuxじゃなくてMacみたいな感じをうけるけどな
2013/08/29(木) NY:AN:NY.AN
今時Mac信者で、Mac OSとLinuxが、どちらもUnix系という同類であることを知らないなんて、
相当のバカだぞ?

……相当のバカなのかw
2013/08/29(木) NY:AN:NY.AN
おまえはなにをいっているんだ
2013/08/29(木) NY:AN:NY.AN
そんなわかりきったことをドヤ顔で講釈する>>430って…
433デフォルトの名無しさん
垢版 |
2013/09/02(月) 10:09:50.80
>>427
手段と目的を履き違える奴は
関数型言語には(Linuxもか)向いてない
2013/09/02(月) 14:43:34.87
で、流行でしかモノを判断できない奴の使っている言語はなんなんだ?
435デフォルトの名無しさん
垢版 |
2013/09/02(月) 15:56:05.57
サンデープログラマーだから
業界で関数型が流行ってるって事すらわからん
2013/09/02(月) 16:01:31.04
JavaScriptって関数型言語とも見れる???
2013/09/02(月) 16:10:50.92
>>436
そんなこと言い出したらCでも関数型プログラミングはできる
2013/09/02(月) 16:18:46.45
いや、そういうマクロ的屁理屈じゃなくて
ラムダ式とか第一級関数とか、前向きな機能揃ってるんじゃないかなあと思って
2013/09/02(月) 16:21:38.70
>>436
いまさら
2013/09/02(月) 16:21:53.27
関数型プログラミングならどの言語でもできる
関数型言語と呼ばれるのは関数型プログラミング「しか」できない言語だ
だから「使えない」と烙印を押される
JavaScriptはそうじゃないだろう?
2013/09/02(月) 16:23:20.07
また意味不明な論理が来ました。

Haskell以外に『関数型プログラミング「しか」できない言語』ってあるか?
2013/09/02(月) 16:24:26.89
>>441
屁理屈乙
お前は0か1かしか考えれんのか
2013/09/02(月) 16:38:50.97
度合いを日本語で語るとかプログラマの恥。
勘違いして欲しくないんなら数値で語れ。
2013/09/02(月) 16:40:41.13
言語を作った人が「これは関数型だ」と言い張れば関数型になる。
そうでないなら外野があれこれ言うのは野暮というものだろう。
2013/09/02(月) 17:00:37.50
関数型は使えないというタイトルなんだから、そんな結論じゃダメでしょ。
関数型だとアピールしてる言語はクソが多いってことなら問題ないけど。

……あ、もしかしてそういう話?
2013/09/02(月) 17:40:30.44
関数型言語の問題点は「汎用的すぎる」って点にあると思う

低レイヤ…C
ゲーム…C++
言語処理系…C++
統計…R
CGI…Perl
Webアプリ…PHP
ブラウザ…JavaScript
Windowsアプリ…C#
iPhone…Objective-C
汎用スクリプト…Python, Ruby
業務システム…Java

「この用途ならこの言語」って言えるような分野って関数型言語にある?
2013/09/02(月) 18:07:41.26
なんか書き込みが多いと思ったら、どうでもいい書き込みばかりだな
2013/09/02(月) 21:59:22.67
関数型言語でググレカス
2013/09/02(月) 22:05:32.41
関数型ってGUIもI/Oも苦手分野じゃん。
いったいどうしろってんだ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。