トップページ⇒tech
1001コメント379KB

関数型言語は何故普及しないのかを考える

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/10/11(月) 19:07:49
あくまで、関数型言語は何故普及しないのかをメインに考えるスレです。
このテーマの存在をどうかお忘れなきよう願います。

前スレ
 関数型言語は何故普及しないのかを考える
 http://hibari.2ch.net/test/read.cgi/tech/1277215506/l50
0685デフォルトの名無しさん2010/12/23(木) 16:46:21
>>683
http://hibari.2ch.net/test/read.cgi/tech/1289292155/477
関数型言語でどうやるかはしらない。
0686デフォルトの名無しさん2010/12/23(木) 17:18:24
>>682
2進数はn進数の一種だからbit演算子より整数の割り算と余りの方が良いのでは?
http://haskell.org/ghc/docs/7.0-latest/html/libraries/haskell2010-1.0.0.0/Prelude.html
>div :: a -> a -> a
>  integer division truncated toward negative infinity
>mod :: a -> a -> a
>  integer modulus, satisfying
>   (x `div` y)*y + (x `mod` y) == x
>divMod :: a -> a -> (a, a)
>  simultaneous div and mod
0687デフォルトの名無しさん2010/12/23(木) 19:20:00
>>684
超ありがとう。満足♪
f :: Int -> IO ()
f n = if n==0 then return () else f (Data.Bits.shiftR n 1) >> (printf "%d" (n .&. 1))
g n k = if n==0 then return () else g (div n k) k >> (printf "%d" (mod n k))

reverseを使ってみた版
当初IO [a]をliftMでreverseみたいなのが頭の中にあったものの
printとかじゃIO[a]は作れなかったので
結局リストに入れただけ
思ったより複雑になってしまったし
あまり利点が感じられなかった

h:: Int -> Int -> [IO ()]
h n k = if n==0 then [] else (printf "%d" (mod n k)) : (h (div n k) k)
i n k = List.reverse $ ((putStrLn ""):(h n k))
j k n = List.foldl (\a b -> a >> b) (return ()) (i n k)
tester k = mapM_ (j k) [1..10]
--2進数と3進数で10まで出力
main = tester 2 >> tester 3
06883392010/12/23(木) 19:36:49
>>341
規制で書けなかった
おまえは一行で言語の仕様を全て把握できるんだな?
定義しようが同じ関数には違いないんだろ?
a <== b <== c <== d
<==は関数であり文の外で定義されているものとする
<==はxクラスを受け取ってyクラスを渡す
ab間bc間cd間が同じ関数だと知ることができる
関数は関係そのものである
従って同じ関係であると"知ることができる"
e<==(f<==(g<==(h)))
g<==メソッドはmクラスを受け取りnクラスを渡す
f<==メソッドはnクラスを受け取りmクラスを受け取っていない
同じ関係となるためには渡すクラスもmクラスにする必要がある
ところがそれを一箇所で定義できないため確信できない
定義が誤って一致したとしても文中でそれを知る術が無い
コピペを変更し忘れた場面を想像して欲しい
したがって同じ関係かどうか"知ることができない"
OOPLも演算子オーバーライドを使えば書くことはできる
だがそれはOOPLに不要な機能とされている
現にJAVAはC++との差別化を図りそれを削っている
C++もCの思想を優先したに過ぎない
「プログラマーのできることを制限しない」という思想だ
すなわち高級言語とは真逆の思想だ
06893392010/12/23(木) 19:38:22
ボール投げる方は単純化した
a(b)
aとbが関数でありxクラスを受け取ってxクラスを返すものとする
するとaとbを入れ替えて書くこともできる
入力に関わらず同じ値を返す関数を想像してくれ
全体の関係は変わるがaとbの定義は変わらない
述語と目的語が場面によって換わるので自然言語的とは言えない
e.f
OOPLで入れ換えるにはf.eを別に定義することになる
同じ名前であってもオブジェクトとメソッドという定義が変わる
したがって入れ換えることができず自然言語的と言える

人は理由も無く面倒なことはしたがらない
ましてそれが良くないと判っていればなおさら
つまり面倒であることが抑止力になるということ
関数型は自然言語的でないしそれっぽく書くのも面倒
上の例で判るように一文に関数を詰め込んだ方が書き易いから
思想が反映された書き方の違いこそ言語の違い
高級言語は何をできるかより何をできないかに存在意義がある
関数型はOOPLより少しできてしまうから低級なだけ
低級な言語を理由無く使おうとしないのが人間の心理
普及させたければ使う理由を作ってやれば良い
06903392010/12/23(木) 19:40:57
概念を説明するのって難しいな
じゃあ自分と何かとの関係を考えてみてくれ
├──関係─→┤__何か__│
関数型であればこうなる
├──関数─→┨__何か__┃
何かが関数であればこうなる
├──関数─→┨__関数__┃
関数は直接扱える
扱えないと既に関係を扱っていることと矛盾するため
関数を直接扱えるということは関数を知ることができる
関数は関係そのものだから関係も"知ることができる"
どこからどの関数なのか境界が曖昧になるところに注目
それこそが参照透過性や遅延評価の有無になる

OOPLであればこうなる
┃___オブジェクト____┃
├─メソッド→┨__何か__┃
何かがオブジェクトであればこうなる
┃_______オブジェクト_______┃
├─メソッド→┨___オブジェクト____┃
├─メソッド→┼─メソッド→┨__何か__┃
オブジェクト以外の何かは直接扱えない
直接何かを扱うことがオブジェクトの定義に反するため
従ってメソッドは直接扱えず知ることができない
メソッドは関係そのものだから関係も"知ることができない"

関数型はミクロの関係を扱おうとする
OOPLはマクロの関係を扱おうとする
相反する概念なのだから良いとこ取りはできない
関数型言語を知らなくても本質は語れる
関数とオブジェクト指向を理解してればな
これでも解らないならもう知らん
0691デフォルトの名無しさん2010/12/23(木) 20:33:55
>>339
そうだな、俺が悪かった、もう許せ
0692デフォルトの名無しさん2010/12/23(木) 21:25:59
純粋関数型が流行るとして主として何に使われるの?
>>622は論理回路、金融デリバティブと書いてるが他にもある?
0693デフォルトの名無しさん2010/12/23(木) 21:31:32
要するに
科学技術計算ではFORTRANに勝てず
低水準の仕事ではCやアセンブラに勝てず
事務計算ではCOBOLに勝てず
WebではJavaやLLに勝てないから
きんゆうでりばてぃぶとかになるのか?
0694デフォルトの名無しさん2010/12/23(木) 21:39:23
構文解析
0695デフォルトの名無しさん2010/12/23(木) 22:00:50
>>692
おもちゃとして遊びに使われるに決まってる

おれは Haskell で遊んでるぞ
0696デフォルトの名無しさん2010/12/23(木) 22:09:14
結論 : 実用に使えない高級なおもちゃ
0697デフォルトの名無しさん2010/12/23(木) 22:15:05
市民講座で年寄りに覚えさせればボケ防止になる
0698デフォルトの名無しさん2010/12/23(木) 22:25:29
GHC:ばあさんや、manyはまだかの?
parseん:じいさん、manyはさっき(コンパイラが)食ったばかりですよ
0699デフォルトの名無しさん2010/12/23(木) 22:44:52
ボケってのは知能が低下するんじゃないんだよ
状況とか価値の判断がおかしくなるんだよ
幼児よりもキチガイに近い
もともと頭の悪かったやつにプログラミングなんてやらせても意味ない
0700デフォルトの名無しさん2010/12/23(木) 22:49:11
>>693
さすがにCOBOLには勝ってるのでは…

それと、低水準の処理でアセンブラに「勝てる」言語など、永遠に登場しないだろう。
コンピュータ・アーキテクチャが変わりでもしない限り。
0701デフォルトの名無しさん2010/12/23(木) 23:21:24
>>700
いやマジでつっこまれてもw

COBOLって任意桁数のBCD演算やらISAMやらを組み込みで持ってて
メインフレームの固定長データセットに非常に相性が良いようだし
COBOLが使われてる分野では未だに圧倒的なシェアを誇る言語だと
思っていたけど、何しろ全然詳しくないので…

事務処理の世界はもう関数型の独壇場だったのか?
0702デフォルトの名無しさん2010/12/23(木) 23:30:17
そんなことない。絶賛Javaで書き直しまたはそのままCOBOLで放置プレイ中だよ。
0703デフォルトの名無しさん2010/12/23(木) 23:33:43
関数型で事務処理は聞いた事がないが、探せばあると思う。
0704デフォルトの名無しさん2010/12/23(木) 23:36:57
あんまよく知らないんだけどいわゆる事務処理って何?
例えば給与明細の紙を出力するためにデータベースからデータを取ってきて
それを整形表示して印刷とかそんなの?
0705デフォルトの名無しさん2010/12/23(木) 23:38:50
会社が事務処理をコンピュータ化したものが事務処理の定義でいいだろう。
相当範囲は広い。
0706デフォルトの名無しさん2010/12/23(木) 23:44:16
やはり今時なら、Webアプリが簡単に組めるよ!と言い張れないと流行らないな。
0707デフォルトの名無しさん2010/12/23(木) 23:46:38
まあ科学技術計算、低水準、組み込み、事務、webで
勝てないのに普及させるのは相当難しくないか?
0708デフォルトの名無しさん2010/12/23(木) 23:48:49
>>704
うん俺もそんなんをイメージしていた
汎用機にもツリー型とかリレーショナルなデータベースはあるはずだけど
固定長のISAMファイルって要するに簡易的なデータベースだから
ただのISAMでやってるケースも多いのではと思われ
バッチだけでなくオンライン的な処理が必要な場合は
資源管理のためにトランザクションモニタとかジョブキューとか使うんだろう

Javaは特別にその種の仕事に特化した言語じゃないから、
J2EEあたりのブクブクに太ってた頃のJavaでリプレースしようとして
泣いた会社は結構あるのでは
全然詳しく無いし、ただの想像だけど
0709デフォルトの名無しさん2010/12/23(木) 23:50:11
ゲームで勝てるとある程度普及する
0710デフォルトの名無しさん2010/12/23(木) 23:51:08
>>700 そういえばデータフローマシンのアセンブラはアセンブラじゃなかったわな
0711デフォルトの名無しさん2010/12/23(木) 23:53:35
老人ホームが特許庁の大規模システム開発を受注するくらいだからな
0712デフォルトの名無しさん2010/12/23(木) 23:57:45
今ゲームで多用されてるのって何だろ
C++, Java, C#, Flash/ActionScript, Luaといったあたり?
0713デフォルトの名無しさん2010/12/24(金) 00:06:06
VHSもインターネットもアダルトの貢献は大きい。
アダルトに特化するしかない
0714デフォルトの名無しさん2010/12/24(金) 00:06:32
>>712
メーカによりけりだろ?
メーカー固有のゲーム製作言語とかあったりするし…
0715デフォルトの名無しさん2010/12/24(金) 00:09:36
>>713
つまり「大人のおもちゃ」か!
0716デフォルトの名無しさん2010/12/24(金) 00:22:33
人間は禁止されると無性にしたくなるからな
Real World Haskell を成人図書コーナーに置けば
中高生が隠れて読み耽るだろう
0717デフォルトの名無しさん2010/12/24(金) 05:45:44
>>700-701
http://www.indeed.com/jobtrends?q=Perl,PHP,Python,Ruby,COBOL,Fortran,Lisp,SML,Haskell
COBOLの求人はLLに抜かれましたが、関数型言語の数十倍あります。

http://www.indeed.com/jobtrends?q=Lisp,SML,Haskell,Scala,Clojure
古参をごぼう抜きしたScalaは普及が続くかも知れません。
0718デフォルトの名無しさん2010/12/24(金) 07:46:13
なんで関数型の「流行る分野」を考えようとするのか分らんな
プログラムしてて楽しければ、役に立たなくてもいいじゃん

(応用じゃない)純粋な数学と同じだよ
0719デフォルトの名無しさん2010/12/24(金) 07:48:44
>>718
なんで考えるかというとそういう趣旨のスレだから
0720デフォルトの名無しさん2010/12/24(金) 07:49:13
>>706
Webアプリを簡単に組めないプログラム言語を
探す方が難しい。
0721デフォルトの名無しさん2010/12/24(金) 07:52:41
俺はこんな難解な言語もマスターしているんだぜ!
数学的思考が出来ないドカタは理解出来なくて当然!

こういう上から目線が多いから、いつまでたっても普及しない。

0722デフォルトの名無しさん2010/12/24(金) 07:53:07
プログラム言語の選択では、不適合な分野が
あると、将来その分野に進出するケースも
想定して忌避することはある。関数型言語の
場合ここら辺はあるのかな。
0723デフォルトの名無しさん2010/12/24(金) 07:54:35
>>721
それは、はっきりいって、あると思う。
0724デフォルトの名無しさん2010/12/24(金) 09:33:09
関数型言語は超高級関数電卓として大いに使われていると思うが。
まあ、プログラム言語としての利用じゃないわけだけどね。
0725デフォルトの名無しさん2010/12/24(金) 10:14:05
Rとかかな?あれは関数型といっていいのか?
0726デフォルトの名無しさん2010/12/24(金) 10:33:39
>>724
数値計算とか数式処理って専用のソフト使わないの?
matlabとかmathematicaとか
0727デフォルトの名無しさん2010/12/24(金) 10:58:42
>>721
そもそも関数型を本当に普及させたいのかと疑問に思う
自分はポルシェを乗り回せるぜ、というひとは、ポルシェがカローラになるより
ポルシェのままのほうがうれしいのでは?
0728デフォルトの名無しさん2010/12/24(金) 12:36:18
>>727
それもあるし、関数型が普及する必要があるとみんな思ってるのかも疑問

普及する必要あるのか?

無ければ普及しないぞ
0729デフォルトの名無しさん2010/12/24(金) 13:23:24
>>721
Haskellは、IOモナドが分かりにくいのが一番の理由じゃないかな。
副作用を分かりやすく形式化したもののはずなのに、これが分かりにくくて普及しないって、にんともかんとも。
0730デフォルトの名無しさん2010/12/24(金) 15:37:43
>>728
部分評価とか非正格評価は分散サーバとかに使える。
純粋ナンタラで美しいィィ!とか
モナドはストリームより表現力が上ェェェ!
とかはどうでもいい。
0731デフォルトの名無しさん2010/12/24(金) 15:56:03
>>728
普及した方が、給料は上がる。
0732デフォルトの名無しさん2010/12/24(金) 16:29:50
>>731
一般に、普及すると仕事は増えるけど給料は下がるのでは

需要「だけ」が増えれば給料も上がるかもしれないが
そういう都合のいい普及の仕方ってあるのだろうか
0733デフォルトの名無しさん2010/12/24(金) 16:49:37
>>732
普及の程度にもよるけど。10年後に世の中の主流が
Haskellになると周知されたら、今、ソフトウェアハウス
で月給40万のHaskellプログラマの月給は転職前提で
100万を超える。そういう意味で。それを夢見て。
0734デフォルトの名無しさん2010/12/24(金) 17:01:22
なるほど、一種の先行者利益的なものを狙うわけか
0735デフォルトの名無しさん2010/12/24(金) 17:43:36
2番じゃダメなんですよ。
1番でなくては。
0736デフォルトの名無しさん2010/12/24(金) 19:11:45
>>731
その給料を出す方から見た関数型の必要性は?
0737デフォルトの名無しさん2010/12/24(金) 21:20:09
>>726
最近の数値計算はMatlabとC、C++が主流っぽい
0738デフォルトの名無しさん2010/12/24(金) 21:22:46
数式処理はMathematicaが圧倒的。遅いけど
0739デフォルトの名無しさん2010/12/24(金) 21:29:58
金無いから Maxima 使ってる
0740デフォルトの名無しさん2010/12/25(土) 00:21:59
数値計算に向いていようが普及とは殆ど関係無いだろ。
やはり、Webかクラウドに最適だと言えなきゃね。
0741デフォルトの名無しさん2010/12/25(土) 00:53:53
erlangがほとんど話題に上がらないのはなぜ?
0742デフォルトの名無しさん2010/12/25(土) 01:04:59
エロランゲージ?
0743デフォルトの名無しさん2010/12/25(土) 01:15:03
一時期良く言われてた、関数型言語の方がマルチスレッド向きで、
マルチコアCPU時代のプログラム言語は関数型言語でウッドボールって
説はどうなったの?

最近、あんまり聞かないから、フカシだったの?
0744デフォルトの名無しさん2010/12/25(土) 01:57:05
>>742
「ねぁ、はやく。はやく、あなたを感じたいの!」
「ふふ… ここかい? ここが君のメールボックスなのかい?」
「そうそうよ。はやく、あなたの… あなたのメッセージを私にいれて」
「いいね? 一緒に動くんだよ」
「いいから、はやくあなたのメッセージをいれてったら!」

>>743
「あら? 早漏?」
0745デフォルトの名無しさん2010/12/25(土) 02:34:54
>>743
ItaniumのEPIC向けの最適化にも関数型言語が適してるなんて話もあったなw
0746デフォルトの名無しさん2010/12/25(土) 02:52:54
>関数型言語の方がマルチスレッド向き
って、以下の考え方でおk?

(L1 L2 L3 ... Ln)
で、L(k+1)はLkの結果とは関係がない
Lkは互いに無関係だから別々のスレッドで処理できる
さらにLkは
(M1 M2 ... Mn)
で、M(k+1)は以下略

どんどんスレッド増えていくからうまくいってないのかな
0747デフォルトの名無しさん2010/12/25(土) 03:00:50
参照透過性がスレッドの独立性を保証するというコンセプトなんだと思うけど
条件が厳しすぎると思う。状態の概念は導入しないと。
0748デフォルトの名無しさん2010/12/25(土) 05:50:09
コンパイラが重過ぎてヤバイ空気が漂ってる
0749デフォルトの名無しさん2010/12/25(土) 09:12:08
あと数年の辛抱
0750デフォルトの名無しさん2010/12/25(土) 11:18:39
簡単にスレッドとして切り裂けても実用的な縦方向の長さを確保するコンパイラ技術が伴ってなかったからだと思うなー
0751デフォルトの名無しさん2010/12/25(土) 13:20:41
>>721
関数型って難解なのか?

何年もかけて習得した手続き型でのテクが使えないから
最初は手も足も出ないが
0752デフォルトの名無しさん2010/12/25(土) 13:40:50
手続き型でのテクって何だ?
0753デフォルトの名無しさん2010/12/25(土) 13:56:00
haskellの日本の第一人者っていないの?
結城浩とかえぴすてーめーとかやねうらおwとか
0754デフォルトの名無しさん2010/12/25(土) 13:56:51
単純に比較できないがHaskellの仕様書のページ数はC++の1/3以下、Javaの半分しかない

俺選 ザ・手続き型コード
while(*p++=*c++){}
0755デフォルトの名無しさん2010/12/25(土) 13:56:56
難解というわけではないな
ただ鉄痔木型のノウハウがあまり通用しなかったりするのもたしか
0756デフォルトの名無しさん2010/12/25(土) 13:59:12
>>752
例えばJavaを書いてる人がRubyを習得するのは「比較的」楽だろう。
その習得を容易にさせた何かの総称。

Rubyを触った時は方言が聞き取りにくいが日本のどっかって感じだが
Hakellを触るのは外国に来た気分だった。
0757デフォルトの名無しさん2010/12/25(土) 14:03:16
既出だがその手続きプログラマの習得コストが普及を妨げてるよな
0758デフォルトの名無しさん2010/12/25(土) 14:15:54
長年の手続き型の経験で手続き型の考えが染み付いてるというのはすごいある

ワードカウントといったら辞書にワードを挿入、カウントをインクリメント
するんだろ、とかまず発想するし
深さ優先探索といったらスタックの出し入れだの枝のマーキングだのを考える
そもそも「深さ優先」とかいう時点で計算の順序を思いっきり想定している
0759デフォルトの名無しさん2010/12/25(土) 14:22:42
>>752
ループと外部イテレータ。
ループが外部に晒され、副作用も晒される。

外部イテレータがあれば内部イテレータも簡単に書けるが、逆は難しい。
つまり、副作用ありの言語で副作用を隠蔽するのは簡単だが、逆は難しい。
0760デフォルトの名無しさん2010/12/25(土) 14:51:30
ところで関数型の一番の利点ってどういう所なんだろ?
それとおすすめの関数型言語の本があったら教えて欲しい
来年はとりあえずその言語の習得から始めようかと思ってるんで
0761デフォルトの名無しさん2010/12/25(土) 15:04:32
調べる木がないならまた来年な
0762デフォルトの名無しさん2010/12/25(土) 16:07:37
>>760
もう「関数型の」利点なんて大して無いんじゃね
俺にとって使い易い言語がたまたま関数型だっただけだと思ってる

「プログラミングHaskell」おすすめ
0763デフォルトの名無しさん2010/12/25(土) 16:13:27
>>762
それを読んだら、「関数プログラミング」もおすすめ
0764デフォルトの名無しさん2010/12/25(土) 17:30:30
再帰書いたら「わかりにくいのでfor文で書き直す様に」と言われるこんな世の中じゃ
0765デフォルトの名無しさん2010/12/25(土) 17:36:03
意味もなく末尾再帰で最適化されてもいない、
スタックを浪費するだけのアホ再帰は有害。
半端に関数型かじった生半可な奴がよく書く糞コードの典型例。
0766デフォルトの名無しさん2010/12/25(土) 17:38:53
再帰がスタック制限で実用的でないのがポイズン
0767デフォルトの名無しさん2010/12/25(土) 17:41:41
>>765
再帰が見えない連中の典型的なコメント。
ここで、「見える」とは棋士が「読む」のでは
なく、一瞥で決める。そういう意味。
0768デフォルトの名無しさん2010/12/25(土) 17:45:06
「なんとなく再帰」は許されないのか?
世知辛い世の中だな。
0769デフォルトの名無しさん2010/12/25(土) 18:06:51
再帰で書かれたクイックソートよりループ展開したクイックソートのほうが
わかりやすいという奴がいたらお目にかかりたいものだよなw
0770デフォルトの名無しさん2010/12/25(土) 18:22:19
>>757
自分の知っている事を事前条件にしようとしてるって意味で
プログラム言語だというくくりで学習しようとするから成長曲線が鈍るんだよね

パラダイムシフトって単語使うのはいやだけど考え方が違う物なのだから、
一度自分は何も知らないって地点に立ってくれるだけで楽に学習可能なハズなんだけど
そういう事をするには既存言語で得た地位が高いプライドになって邪魔してる感じ

0771デフォルトの名無しさん2010/12/25(土) 18:32:25
>>767
「早すぎる最適化は諸悪の根源である」という格言を知らない人なのかも
知れないけど、たんに再帰を苦手な人が「パフォーマンスが悪いから書くな」と
言っているだけのことが多いんだろうな
0772デフォルトの名無しさん2010/12/25(土) 18:36:05
手続き型で再帰書くときは、一旦関数型でコード書いてる
なんつーか手続き型でいきなり書くとしっくりこないw
0773デフォルトの名無しさん2010/12/25(土) 18:37:21
>>770
> 一度自分は何も知らないって地点に立ってくれるだけで
簡単にいうけど、そう簡単なことではないのでは

多くの人にとってプログラミング言語は単に目的を達成するための手段で、
慣れた言語なら簡単に達成できることのために一度全てを捨てるほどの
多大な努力を必要とするなら、よほどの動機付けやメリットが必要になる
0774デフォルトの名無しさん2010/12/25(土) 18:37:50
>>760
一番の利点はプログラミングに対する学習コストが下がることだと思う
駆け出しの頃、iとかjとか色々な変数の意味の解析からしなきゃならなくて
クイックソートのコードってなんて難しいんだって思ったものだけど
あれがHaskellであったなら、すっきり理解できただろうと思う。
短い上、リスト内包表記と再帰理解すればいいだけだし
0775デフォルトの名無しさん2010/12/25(土) 18:40:48
>>774
それぐらいの話なら関数型言語である必要は無い気がする
要は高級言語であればいいんだよね、Pythonみたいな
リスト内包も再帰も使えるよ
0776デフォルトの名無しさん2010/12/25(土) 18:42:05
>>774
クイックソートは末尾再帰じゃないから、手続き型でもループは使わないよ
その思い出話は捏造くさい
0777デフォルトの名無しさん2010/12/25(土) 18:42:33
>>1
高階関数の使用に原因がある、という意見はあまり聞かないが。
人間の問題の解く際の理解力、構成力の個人差を考えると、凡庸
な頭脳の持ち主にとって、障壁になりそうなのは、ここら辺り。
頭がオーバーヒートして、思考停止に陥る危険があるのかも知れ
ない。 この問題が原因だとすれば深刻。
0778デフォルトの名無しさん2010/12/25(土) 18:44:56
>>777
higher order functionを難しい人は確かにいるだろうけど、
そういう人はCでqsort()やsignal()、コールバックを使うにも困るはずなので、
別にぜんぜん関数型に限った話じゃない
そうした人はたんにプログラマに全く向いていない人であるというだけのこと
0779デフォルトの名無しさん2010/12/25(土) 18:51:52
>>778
多くのプログラマが現に使えないし、多分、プログラマと
して向いていない。それにもかかわらず、プログラマとして
何十万人(多分もっとずっと多い)も存在している。
0780デフォルトの名無しさん2010/12/25(土) 18:52:39
>>775
なんというかPythonはわりと関数型言語に近いと思うんだよね
何故関数型言語が普及しないのかってスレだけどさ
普通の言語にどんどん関数型の機能が取り入れられてるから
関数型の考え方はどんどん普及してるってのが個人的な思い

少し言えば、理解コストについては、
型がある言語のほうが低いと思う
引数の型を調べるコストが減るからね
>>776
手続き型でも再帰の理解が必要ってのは省いたよ
0781デフォルトの名無しさん2010/12/25(土) 18:59:54
>>780
うん、現に今のメジャーな手続き型言語の多くが何らかの形で
ファーストクラスの関数的なものを扱えて、LISPのリスト処理能力をある程度
パクってる
手続き型をベースとしているけど、関数型の便利なところをどんどんパクっている
C#、JavaScript、Ruby、Pythonのような言語で特に困っていない人たちに
アピールできるようなメリットがなければ、なかなか普及は難しいんじゃないの
0782デフォルトの名無しさん2010/12/25(土) 19:01:26
駆け出しの頃は関数って考え方があまりなかった
だから、コード量が多いと、些細な事でもこれはどういう意味だろうって考えて
アルゴリズムの重要な部分とは違う所で止まってしまう
関数型は手続き型に比べてそういうのが少ない

Win32APIとかでコードを書こうとしてた頃にやっと
「全部理解しようとすると結局挫折する」ってことを学んだけど
最初はそういうのわからなかったから結構勉強は時間かかった

あと、クイックソートは非再帰版も良く見るよ。スタック使うやつ
まぁスタック使えばどんな再帰もループに展開出来るわけだが
0783デフォルトの名無しさん2010/12/25(土) 19:06:04
今時、スタックサイズの平均はどれくらい? 8MB?

無限ループしてない限りは、オーバーフローしないよね。
0784デフォルトの名無しさん2010/12/25(土) 19:09:33
>>781
個人的には代数的データ型が欲しい
オブジェクト指向でinstanceofで派生クラスチェックとか、
全く型システムの恩恵を受けてる気がしない
■ このスレッドは過去ログ倉庫に格納されています