2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

関数型言語一般

1 :デフォルトの名無しさん:2017/04/01(土) 08:12:00.61 ID:Ylmlk/tQ.net
関数型言語について。
言語同士の比較、おすすめ、不満点など。

34 :デフォルトの名無しさん:2018/07/08(日) 10:06:50.55 ID:teDyKOrA.net
Scheme 始めたんだけど、本やサイト見ると最初のほうに「末尾再帰」が出て来る。
これって、関数型プログラミングの本質じゃないよね?ただの最適化技法だよね。

35 :デフォルトの名無しさん:2018/07/08(日) 14:30:26.24 ID:0enAxBm5.net
ただの最適化技法ではあるけど、関数型を徹底するとループカウンタを書き換えられないので
ループは再帰でやるしかないから末尾呼び出しの最適化が無いとすぐスタックオーバーフローして死ぬ

36 :デフォルトの名無しさん:2018/07/08(日) 16:41:28.02 ID:TI2hdDFV.net
なるほど。
でも、最適化はコンパイラの仕事だしなぁ。
何の説明もなく「末尾再帰」「末尾最適化」が出てくるのはどうなのよ?

階乗は、(1 2 3 ...) ってリスト作って乗算オペレータに渡せばいいと思う。
(* 1 2 3 4 5 6 7 8 9 10)

37 :デフォルトの名無しさん:2018/07/08(日) 23:44:41.43 ID:l291c8sA.net
>>36
Schemeでは末尾再帰形をスタックを消費しないループ同様の実行をするというのが言語仕様において規定されている
だから末尾再帰のプログラムをスタックを消費する普通の再帰の実行方式で実装する処理系はSchemeの言語仕様を満たしていない不完全な処理系ということになる

38 :デフォルトの名無しさん:2018/07/20(金) 08:54:02.56 ID:gRfJSMM7.net
そうなんですね。

39 :デフォルトの名無しさん:2018/10/17(水) 18:29:33.99 ID:UzTddT20.net
関数型言語を学びたいけどぜんぜんわからん
何となくやりたいことはわかるけど、それとコードがリンクしない
プログとか読んでも頭いたくなるだけだし
頭好い人にはいいのかもだけど、俺みたいなお馬鹿プログラマにはかける気がしない

40 :デフォルトの名無しさん:2018/10/17(水) 19:50:25.40 ID:px5dKxjh.net
ちな関数型のどの辺?FreeMonadとかやらんでいいぞ

41 :デフォルトの名無しさん:2018/10/17(水) 21:54:15.03 ID:UzTddT20.net
どの辺と聞かれると困るんだけど
モナドの考え方とか
値は変えちゃいかんとか
変数はラベル的にとらえるとか
副作用がどうとか

とにかく今までの考え方を壊して、見方を変えねばならんのかなと思った

42 :デフォルトの名無しさん:2018/10/18(木) 18:29:53.10 ID:AYRrw0PU.net
へんなブログ二本も読んで始める前から嫌いになったわ
おとなしくc#でラムダでも書いてるわ

43 :デフォルトの名無しさん:2018/10/18(木) 20:51:56.44 ID:Jw/UF2kZ.net
>>41
自分はF#とかなのでなるべくイミュータブルに書くけどミュータブル使うとこは使うよって感じですね全部イミュータブルでもシステム書けると思うけどミュータブルで書いた方が手っ取り早いところも多々ありそう

44 :デフォルトの名無しさん:2019/04/16(火) 14:20:52.12 ID:LcPraQem.net
関数型言語の実際の開発効率に関する研究はあるの?

45 :デフォルトの名無しさん:2019/04/16(火) 14:57:30.52 ID:TqTLtNty.net
同じような内容のものをC#からF#に作り直してコード1/5、バグ激減、むしろ速くなったところも多々など言ってる記事あったな

46 :デフォルトの名無しさん:2019/04/16(火) 18:01:18.81 ID:LcPraQem.net
同じものを作り直したからじゃないの?
2つのチームに全く同じものを初めて開発させてどうなるか、みたいな実験が行われないと分からんな

JavaとかVBは検索すると生産効率の調査が行われてるんだけど

47 :デフォルトの名無しさん:2019/04/16(火) 18:52:36.95 ID:TqTLtNty.net
>>46
まあ自分で書いてみりゃC#に比べて明らかにコード短くなるしバグも少ないのは実感できるかと

48 :デフォルトの名無しさん:2019/04/16(火) 19:58:48.26 ID:IYSOO+Im.net
学習コストは高いけど魅力的
大学の授業でこそやってほしい
関数型の授業受けてみたいよなあ...

49 :デフォルトの名無しさん:2019/04/16(火) 22:05:49.14 ID:LcPraQem.net
関数型はデバッグが難しいみたいな話聞くんだけどどうなの?

50 :デフォルトの名無しさん:2019/04/16(火) 22:08:18.21 ID:LcPraQem.net
https://gist.github.com/Gab-km/2419511
>JavaとScalaの開発を比較した最近の実験に基づいた Pankratius,
SchmidtおよびGarretonらによる研究 は、
そんな大勝利を明らかにはしなかった。
確かに、恩恵(関数型のコードが想定よりいいパフォーマンスを出し、
よりコンパクトになった)はあったものの、生産性の結果は、せいぜい、
まちまちだった。Scalaプログラムは目的を成し遂げるために同じか、
それより多くのプログラミングの努力を要し、
またデバッグがより難しくなった。

51 :デフォルトの名無しさん:2019/04/17(水) 00:52:46.71 ID:QXKQsrQs.net
関数型は標準関数や備え付けのメソッドが増えれば増えるほど簡単になりそう
もちろん非純粋関数じゃだめだけど

52 :デフォルトの名無しさん:2019/04/17(水) 01:00:00.53 ID:8ss+sM3t.net
>>49
自分はF#で純粋関数型ではないけれどミューテートする場所が限られるしデバッグむしろしやすいと思うがな
何をもって難しいと言ってるのだろう

53 :デフォルトの名無しさん:2019/04/17(水) 06:21:12.65 ID:uenBKkUK.net
Haskellはデフォルト遅延評価なので慣れていてもその部分のデバッグが難しいという話をする人は居る
Clojureはやはりデフォルトで遅延シーケンスが多く、JavaとClojureのエラーがズラッと並んで慣れていてもデバッグがしんどいという話をする人がいる

後者のエラーメッセージはだいぶ読みやすくなったらしいが昔のはマジでしんどい

関数型と一纏めにされがちだけど関数型のデバッグがしんどいというのは遅延評価のデバッグがしんどいという話であることが多い気がする

54 :デフォルトの名無しさん:2019/04/17(水) 08:33:13.73 ID:1UuXcvbJ.net
いい面もある。だけど悪い面もあるよね。

55 :デフォルトの名無しさん:2019/04/17(水) 08:49:47.58 ID:8ss+sM3t.net
ああ正格じゃないとちょっとデバッグめんどくさそうというかどうすんだろ
ここ呼ばれるはずなのに呼ばれてない、呼ばれたと思ったけどこの値じゃネェェいつのだコレってなるのかな

56 :デフォルトの名無しさん:2019/04/17(水) 11:23:48.51 ID:VHrQPR5f.net
>>49
非純粋な関数型言語はデバッグし易いと思う。

Haskellはdo形式の複数行のプログラムが、モナドに直すと一行の式になるって言うのを意識しないと
$使って下の式全部も括弧で囲むと解釈される事があるから、理解不足の頃ハマってた。
後は型エラーが多いかな。
デバッガ頼りにするより、自分がその関数の挙動を理解してるか?がデバッグの近道。
コピペしてきても、そのコピペしたコードを理解してないとデバッグ出来ない。
シンドイけど、エラーが無くなったらほぼ思った通りに動く安心感はある。

57 :デフォルトの名無しさん:2019/04/17(水) 17:18:17.61 ID:bfpXtPq4.net
scalaは開発効率が悪いと言ってる記事見つけた。
https://grundlefleck.github.io/2013/06/23/using-scala-will-make-you-less-productive.html

やっぱり良く使われてる言語の方が、総合的に見て一番優れてるんじゃないかな
コンパイル時間の差とか、意外なところが問題になってくるから

58 :デフォルトの名無しさん:2019/04/25(木) 11:28:30.94 ID:4gUVed1M.net
ほしゅ

59 :デフォルトの名無しさん:2019/05/06(月) 12:34:41.53 ID:XhX25YOD.net
あげ

60 :デフォルトの名無しさん:2019/05/06(月) 15:54:43.11 ID:DF3zK1Xx.net
結局haskellの非正格評価はやりすぎってことだろ。
lispマクロみたいにちょこっと入れるくらいがちょうど良いってことだな。

61 :デフォルトの名無しさん:2019/05/10(金) 01:44:51.76 ID:UIKYLzF/.net
みんなすごいな

40越えたおっさんが先週「すごいHaskellたのしく学ぼう!」買ってきた。
ざっくり読んだけどおっさん、理解するのに3年くらいかかりそうだわw

ちなみにSICPは14ページ過ぎたあたりの練習問題で挫折して以来、20年くらい地下結界に閉じ込めている(おっさんが持つと頭がおかしくなって死ぬ)

62 :デフォルトの名無しさん:2019/05/10(金) 09:26:33.52 ID:8CEC/ybx.net
すごいHaskell〜は今でも名著やで

63 :デフォルトの名無しさん:2019/05/10(金) 09:49:04.27 ID:6xQjM2XG.net
>>60
コンパイル時に正格評価に部分的にしてるし(Haskellは全部非正格評価だと末尾再帰でもスタック消費する)、今後それを拡大しろって話もある。
並列処理のリストは正格評価にすべきとか、zipWithにもfoldl’みたいに正格評価版のzipWith’が欲しいとか。

64 :デフォルトの名無しさん:2019/05/10(金) 09:57:58.35 ID:6xQjM2XG.net
>>61
拙著で悪いが、すごいH本で挫折したらamazonでHaskell入門以前(108円)と言う電子書籍を売っているので、
それで手続き脳の価値観を関数脳にしてからの再挑戦を勧めます。

Haskellは、ほぼ数学エミュレータ。

65 :デフォルトの名無しさん:2019/05/10(金) 11:34:17.77 ID:sggjdX/2.net
>>64
108円だったら広告つけてwebで公開してくれません?

66 :デフォルトの名無しさん:2019/05/10(金) 12:05:43.35 ID:73mxg3RL.net
>>65
古事記乙

67 :デフォルトの名無しさん:2019/05/10(金) 15:09:33.91 ID:I6iky/qO.net
>>65
パブーでは長い事無料で公開してたのですが、パブーが潰れまして(T . T)
途中からamazonに合わせて108円にしましたが、パブーが潰れてなければ無料設定出来たので期間限定で無料化も出来たのですが。。。
(amazonでも無料にしたかったけど、項目が無く断念。最低価格の108円に)

パブーの編集機能で書いたので、それ以外の編集の仕方が分からず広告を付けるとかは出来そうにありません。。。

1人だけですが素人の作品に星を付けてくれて、お褒めの言葉を頂いているので108円の価値は一応あるのかな?と。

amazon何とかに入ってると108円のは無料で読めるらしいので、多分それで読んでもらったのでしょうが、
価格に見合った内容になる様に書いたつもりですが、こんな内容で108円は高いとか文句書かれてないのにホッとしてます。

5年で7000円の売上(期待してなかったので最近まで放置してた)ですが、一応そこそこ売れてます。
(108円だと70%が著者の取り分(価格によって取り分が違います)なので100冊は売れてる?)

68 :デフォルトの名無しさん:2019/05/10(金) 19:05:13.19 ID:sZdncDhC.net
>>67
Amazonってことはフォーマットはazw形式ですか?

https://jp.epubor.com/guide/kindle-azw3をpdfに変換/

https://github.com/coolwanglu/pdf2htmlEX
でhtmlに変換して広告入れるとかでうまくいかないでしょうか…
広告収入詳しくないけど5年で7000円なら上回れないかな?

69 :デフォルトの名無しさん:2019/05/11(土) 11:26:48.65 ID:k2bl7TQ1.net
>>63
いやだから言語としては非正格な仕様なのに実際の裏側では色々最適化してる
ってのがそもそもおかしいでしょって思わん?
明らかにチューンする際に変な手間とることになるし。
理屈が破綻してるとしか言いようがない。

70 :デフォルトの名無しさん:2019/05/11(土) 12:23:00.50 ID:ux5rNLyP.net
それ言ったらガベコレもおかしいよなって話になんじゃ

71 :デフォルトの名無しさん:2019/05/11(土) 12:51:13.43 ID:k2bl7TQ1.net
>>70
ガベコレはやってることがそこまで複雑ではない。
まあ最低限の知識はないと確かにリークさせるコードも書けるって問題はあるが。。
少なくとも評価順序の違いほど大きな影響のでるものじゃない。

72 :デフォルトの名無しさん:2019/05/11(土) 13:27:32.41 ID:ux5rNLyP.net
>>71
ガベコレも方式によっては途中で止まったりでパフォーマンスチューン難しくなって、その辺が正確がどうかとかと一緒だって話だよ。まあ程度は違うと思うけどな

73 :デフォルトの名無しさん:2019/05/11(土) 16:32:38.06 ID:PngNQXyb.net
>>68
新たに本を書くとかなら検討しますが、すでにお金を払ってくれた方が100人も居るとなると、
無料化はちょっと裏切り行為みたいな感じなので、辞めておきます。

無料にしたかったのを泣く泣く108円で売っていた通り、お金の問題では無く、買ってくれた人へのけじめとして。

74 :デフォルトの名無しさん:2019/05/11(土) 19:01:05.54 ID:ux5rNLyP.net
>>73
>>65みたいな奴の言う事相手にしなくていいと思うの

75 :デフォルトの名無しさん:2019/05/18(土) 11:10:41.62 ID:cPFyVnxJ.net
kotlinは関数型言語とは言われないと思うんだけど
関数型言語とそうでないものの目安って何かないかな?
厳密な部分は置いといて「この機能があれば」とか
「この実装がやりやすければ」的な目安になる要素はないのかな。
それとも言ったもん勝ちで実は大差ない感じ?

76 :デフォルトの名無しさん:2019/05/18(土) 11:38:39.42 ID:5J0Gqe9l.net
まあ結構テキトーだわな。
https://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E
この表にある「純粋」の項目が純粋なやつの方がより関数型だとは思うけど、
まともに使い物になるやつが全て「非純粋」ってのがなんだか皮肉。

77 :デフォルトの名無しさん:2019/05/18(土) 12:13:47.35 ID:2fCqfP5W.net
関数を引数にとれるか、そういう高階関数をユーザが自由につくれるか、だと思う。

78 :デフォルトの名無しさん:2019/05/18(土) 12:52:28.06 ID:9pyt4zVl.net
関数がファーストクラス、デフォルトイミュータブルとかかなあ

79 :デフォルトの名無しさん:2019/05/18(土) 12:57:23.98 ID:9pyt4zVl.net
関数を組み上げることでプログラムするってのが主方針になってるもの、で、そうすると
>>78みたいなものも付随して出てくる感

80 :デフォルトの名無しさん:2019/05/25(土) 01:20:17.82 ID:7Hh+Cor8.net
C言語の関数ポインタは高階関数になの?

81 :デフォルトの名無しさん:2019/05/25(土) 14:32:39.12 ID:zj5v3uWs.net
そも関数って扱いができないから、言語が関数をサポートしてるとは言えないんじゃ

82 :デフォルトの名無しさん:2019/05/25(土) 15:02:57.21 ID:UKk+E4BI.net
>>80
肝心の質問が誤記で何を訊いているのかわからないが

高階関数の引数になるの?→そういう高階関数があればなれる
高階関数(へのポインタ)になるの?→そういう高階関数があればなれる
高階関数の戻り値になるの?→一般的には無理。ファンクタのようにワンクッションおけば可

83 :デフォルトの名無しさん:2019/05/26(日) 09:30:17.43 ID:Suq0krAi.net
まあ関数クラスを無理やり作ればできるといえばできるな。
カリー化、関数合成あたりはクラス作成の良い例題になる気はする。
実装がめんどくさいのは非正格評価な部分。多分マクロ使うしかない。

23 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★