関数型プログラミング
-
1
ななしのよっしん
2015/10/13(火) 03:00:28 ID: zGVfgrquPR
-
記事立て乙です。誰も書き込んでないのに何故ほんわか推奨テンプレートをつけるしw
といいつつ早速釣られてみる。
関数型である以上、関数本体がファーストクラスなので名前付き関数は単に無名変数を名前に束縛したものだ、という視点は欲しいであります。今ではC++やJavaですらlambdaを持つ時代になって隔世の感あり・・・。
関数は入力のみで定まり隠れた状態を持つべきでないとする考え方自体は関数型以前からあるんだけど、それを徹底するとI/Oとかグローバルな副作用がどうしようもないやんけ、というのが現代関数型とそれ以外を分ける決定的なとこよね。OOPでもローカル変数は静的単一代入に限るとか、フィールドアクセスとその他の処理をきちんと分離するとかを守ると割といい感じのプログラムになる。 -
👍0高評価👎0低評価
-
2
ななしのよっしん
2015/10/17(土) 13:00:18 ID: h6Z270BeLs
-
書き込みありがとうございます。いろいろ教えてください。
>何故ほんわか推奨テンプレートをつけるしw
いや、ちまたのブログとか読んでいると必要かなと...w
>名前付き関数は単に無名変数を名前に束縛したものだ、という視点は欲しいであります。
ラムダ計算の話をしたいということでしょうか。
>現代関数型とそれ以外を分ける決定的なとこよね。
「それ以外」というのが、古典的(?)関数型を指すのか非関数型を指すのかということを確認させていただければと。
>それを徹底するとI/Oとかグローバルな副作用がどうしようもない
この対策が
モナドで分離する: 純粋関数型言語
限定的に許容する: 関数型言語
プログラマの自主性にゆだねる: 非関数型言語
ようなイメージなんですが、ほかに対策方法はあるでしょうか。
> OOPでも~とかを守ると割といい感じのプログラムになる。
これができれば必ずしも関数型プログラミングにこだわらなくてもいいようにも思えるのですが、実際のところどうなんでしょうか。 -
👍0高評価👎0低評価
-
3
ななしのよっしん
2015/10/17(土) 14:51:34 ID: zGVfgrquPR
-
>>名前付き関数は単に無名変数を名前に束縛したものだ、という視点は欲しいであります。
>ラムダ計算の話をしたいということでしょうか。
無名変数じゃないですね。無名関数でした。
ラムダ計算というか、関数オブジェクトのファーストクラス性ですかね(相互に関連はしますが)。クロージャ生成なりカリー化なりの関数->関数演算みたいなものが宣言なしに右辺値的に使えて、どこでも必要なら束縛を持ち込める感覚は関数型センスだと思います。それを文法として切り出すためのラムダと。
>>現代関数型とそれ以外を分ける決定的なとこよね。
>「それ以外」というのが、古典的(?)関数型を指すのか非関数型を指すのかということを確認させていただければと。
自分としては純粋関数型 <> 古典関数型+非関数型ぐらいのイメージです。
隠れた状態を持つなという発想は確かダイクストラの頃にはもう言われてて、必ずしも関数型固有のスローガンではないはずなんですよ。ただあらゆるプログラミングでそれをやるのは現実的じゃないので、文法などで強制するという話にはなりませんでした。ML辺りの古典関数型だと「書きにくく」することでなるだけ副作用を閉じ込めるようにはしてると思いますが、それでも全面的に禁止はしてませんしね。
>この対策が~
>ようなイメージなんですが、ほかに対策方法はあるでしょうか。
詳しくは知らないんですが、多分純粋関数型はモナドに限らないと思います(cleanはやり方が違うと聞いたことがあるんですけど、使ったことないので)
最近だとC++でもconstexprが付いたことで、部分的な関数型要素になったりしてますね。
>> OOPでも~とかを守ると割といい感じのプログラムになる。
>これができれば必ずしも関数型プログラミングにこだわらなくてもいいようにも思えるのですが、実際のところどうなんでしょうか。
というか、これを詰めていくと「関数型プログラミング」という呼ばれるスタイルに近づいていくんじゃないですかね。とはいえ型安全のレベルでカバーしたい等の要請を考慮すると、文法レベルのサポートがあるに越したことはない訳で現代言語がそちらに近づいているのは必然的な流れだと思います。
職業プログラマの主観としては、nil値の扱いと再代入への意識なんかは影響大きいのかな。Swiftのletとか個人的に萌えポイントなんですがw -
👍0高評価👎0低評価
-
4
ななしのよっしん
2015/10/17(土) 15:15:46 ID: h6Z270BeLs
-
>>3
ありがとうございます。
ファーストクラス性という専門用語を用いるとファーストクラス性の説明が必要になると思い、
>関数オブジェクトのファーストクラス性
= 関数を数値などと同じように関数に受け渡しすること
としてすでに書いたつもりなのですが、束縛が可能という点を強調したほうがよいということでしょうか。
>自分としては純粋関数型 <> 古典関数型+非関数型ぐらいのイメージです。
現代関数型 = 純粋関数型言語
古典関数型 = 非純粋関数型言語
ということでしょうか。
>これを詰めていくと「関数型プログラミング」という呼ばれるスタイルに近づいていくんじゃないですかね。
これはたぶんそうなんだと思って、関数型言語とは別に当記事を立てました。 -
👍0高評価👎0低評価
-
5
ななしのよっしん
2015/11/22(日) 10:22:31 ID: q9zoB9M8V+
-
横からですけどほんわかテンプレはつけない方がいいと思いますよ
注意喚起の他にこの記事は荒れてますよって意味合いもあるので
少なくとも私はこの記事を開いたときギョッとしましたね
本当に荒れてから付ければ良いんじゃないですか? -
👍0高評価👎0低評価
-
6
ななしのよっしん
2015/11/22(日) 10:38:28 ID: rd39fpcd7/
-
👍0高評価👎0低評価
-
7
ななしのよっしん
2015/11/22(日) 10:56:33 ID: h6Z270BeLs
-
👍0高評価👎1低評価
-
8
ななしのよっしん
2017/06/18(日) 01:14:30 ID: vxde946Efh
-
👍0高評価👎0低評価
-
9
ななしのよっしん
2019/05/31(金) 20:27:31 ID: OYr5jvVZ+w
-
👍0高評価👎0低評価
-
10
ななしのよっしん
2019/07/16(火) 17:38:55 ID: WL5n1g0ghe
-
👍0高評価👎0低評価
-
11
ななしのよっしん
2019/07/16(火) 21:40:09 ID: h6Z270BeLs
-
👍0高評価👎1低評価
-
12
ななしのよっしん
2019/07/22(月) 21:43:37 ID: WL5n1g0ghe
-
えぇ…ただの意見表明なんだけどこれが「自治の精神に燃えている」扱いになるんですかね?
-
👍1高評価👎0低評価
-
13
ななしのよっしん
2019/09/26(木) 09:46:06 ID: OYr5jvVZ+w
-
👍0高評価👎1低評価
-
14
ななしのよっしん
2019/11/07(木) 12:10:02 ID: WL5n1g0ghe
-
👍0高評価👎1低評価
-
15
ななしのよっしん
2021/05/01(土) 23:52:55 ID: Ec4m+I8/HP
-
👍1高評価👎0低評価
-
16
ななしのよっしん
2021/05/03(月) 12:01:46 ID: h6Z270BeLs
-
👍1高評価👎0低評価