関数型プログラミングと純粋関数型プログラミング言語に関する意見まとめ

論争というか、「純粋関数への誤解」に端を発するバトルがあったのでその顛末を記す意味も込めて。ちなみに、この議論は単に正しい/正しくないかであって、関数型推しであるとかは議論の本質でないと思います。 私と反対の意見もあえて掲載しています。まとめへの追加は大歓迎です。
11
前へ 1 2 ・・ 10 次へ
r.ishibashi @cactaceae

@cubbit2 副作用を含むMonad実装の話をしていたら副作用を含まないMonadの定義の話になったような? 純粋関数であっても副作用に依存した純粋関数って嬉しいんでしたっけ?

2021-12-04 15:56:46
r.ishibashi @cactaceae

@cubbit2 実際のある程度大きなプロジェクトで純数関数型のライブラリを使っていましたが、意識して書き分ける必要があり、教育が必要でした。 副作用に依存する純粋関数だらけになると純粋関数であるメリットは無くなります。

2021-12-04 16:24:13
r.ishibashi @cactaceae

@cubbit2 逆に、副作用に依存していない事が保障されていればMonadだらけでも純粋関数のメリットは活かせます。

2021-12-04 16:28:38
Cubbit @cubbit2

@cactaceae 純粋関数型言語でない言語では、純数関数型のライブラリを使っても、副作用を意識して書き分ける必要があるのは、その通りです なので、それを意識して書き分けなくても関数の純粋性が保証され、作用が自然に型で表現される純粋関数型言語を使ったほうがいい、という話が最初のツイートなのですが……

2021-12-04 16:40:06
r.ishibashi @cactaceae

@cubbit2 関数の純粋性が保障されていても副作用に依存した純粋関数が作れてしまうのでそうなると意味がないです。 それはHaskellでも同じです。

2021-12-04 16:41:59
Cubbit @cubbit2

@cactaceae 「副作用に依存した純粋関数」って何のことですか? IO aを返す関数のことでしょうか? 正確な表現でないと、何を言っているのかわからないのですが…… 「HaskellではIO aを返す関数を作れてしまうので意味がない」っていうことですか?

2021-12-04 16:45:11
r.ishibashi @cactaceae

@cubbit2 先に純粋関数のメリットを合意した方が良いかも?

2021-12-04 16:47:16
Cubbit @cubbit2

@cactaceae いえ、その前に「副作用に依存した純粋関数」とは何を指しているのか、cactaceaeさんの現在の解釈で構わないのでおしえてください

2021-12-04 16:49:08
r.ishibashi @cactaceae

@cubbit2 では一旦その前にCubbitさんの純粋関数の定義を確認させてもらえますか?

2021-12-04 16:51:51
r.ishibashi @cactaceae

@cubbit2 あと五月雨で申し訳ないですが、関数の純粋性についても確認したです。

2021-12-04 16:53:42
Cubbit @cubbit2

@cactaceae はい ある式を評価した結果の値が、その式と常に置き換えられるとき、その式は純粋であるといいます これはHaskellでの通常の純粋性の定義です それでは、cactaceaeさんのいう「副作用に依存した純粋関数」とは何で純粋性の定義は何ですか?

2021-12-04 16:55:00
r.ishibashi @cactaceae

@cubbit2 同じです。 高階関数の純粋性はどう定義されますか?

2021-12-04 16:55:46
Cubbit @cubbit2

@cactaceae いえ、cactaceaeさんの純粋性の解釈は明らかに私と違いますね 「Monadを返す関数が作れればその関数は純粋関数ではないという認識」や「副作用に依存した純粋関数」というcactaceaeさんのコメントから明らかです

2021-12-04 16:58:58
はけた@できるExcel2021 @excelspeedup

HaskellでIOを返り値にする関数が純粋かどうかで(当然、純粋と解釈するわけですが)、プログラミングスタイルが変わる気がしないな。 純粋であろうと、IOを返り値にする範囲はできるだけ狭めたほうが良いんですよね。たぶん。

2021-12-04 16:59:17
r.ishibashi @cactaceae

@cubbit2 「式と結果を常に置き換えられるとき純粋である」ということは、純粋関数とは「同じ式を評価すると常に同じ結果を得られる」と同じ意味と見做して大丈夫ですか?

2021-12-04 23:10:41
Cubbit @cubbit2

@cactaceae 駄目です (() => { console.log("Hello"); return 0 })() は常に同じ結果 0 を得られますが、この式を0と置き換えると何も標準出力されなくなり振る舞いが変わるので置き換えられません それでcactaceaeさんのいう「副作用に依存した純粋関数」は何を指してますか? cactaceaeさんの純粋性の定義は?

2021-12-04 23:19:06
r.ishibashi @cactaceae

@cubbit2 > (() => { console.log("Hello"); return 0 })() これは純粋関数である式が、その同じ式を評価しても同じ結果が返ないことがあるという例ですか?

2021-12-04 23:22:58
Cubbit @cubbit2

@cactaceae 違います 先に述べた理由によってこの関数は純粋だとは言えないということです それでcactaceaeさんのいう「副作用に依存した純粋関数」は何を指してますか? cactaceaeさんの純粋性の定義は何ですか?

2021-12-04 23:25:50
r.ishibashi @cactaceae

@cubbit2 ということは、「式と結果を常に置き換えられるとき純粋である」といい、「同じ式を評価すると常に同じ結果を得られる」ことは関数の純粋さとは関係ないというのがcubbitさんの認識ですね?

2021-12-04 23:28:10
Cubbit @cubbit2

@cactaceae 違います 関係あります それは純粋性のすべてではありませんが、その一部といえます それでcactaceaeさんのいう「副作用に依存した純粋関数」は何を指してますか? cactaceaeさんの純粋性の定義は?

2021-12-04 23:30:46
r.ishibashi @cactaceae

@cubbit2 僕の知っている純粋関数の定義は下の二つを満たすものです ・関数の戻り値は,同一の引数に対して同一である ・関数の適用には副作用がない en.wikipedia.org/wiki/Pure_func…

2021-12-04 23:35:59
Cubbit @cubbit2

@cactaceae そのウィキペディアの説明は、cactaceaeさんの「副作用に依存した純粋関数」や「副作用に依存した純粋関数が作れてしまう」のような発言とは矛盾するので、それはcactaceaeさんの純粋性の定義ではないと思います

2021-12-04 23:41:57
r.ishibashi @cactaceae

@cubbit2 高階関数の評価をどう解釈するかによって変わってくると思います。 RreaderMonadを返す関数はその関数単体で見れば純粋関数といえると思いますが、そこも違いますかね?

2021-12-04 23:44:31
かぎりん @kagilinn

純粋関数型言語は使いたいけれど,他の人がメンテできなくなるので使えないんですよ…あと,自分自身もHaskellは読み慣れないのでもうちょい主流言語っぽい記述の純粋関数型言語が流行ってくれれば… twitter.com/cubbit2/status…

2021-12-04 23:49:10
Cubbit @cubbit2

関数の純粋性の大切さを強調したり関数型プログラミングの有用性を声高に説くわりに、純粋関数型言語を使うのだけは頑なに拒む人たち、なぜなのか

2021-12-04 01:44:48
Cubbit @cubbit2

@cactaceae HaskellではReaderを返す関数も純粋だと思います あと高階関数であるかどうかは関係ないです 純粋性はHaskellでは遅延評価を成立させるための条件にもなっているので、人によって解釈が変わることはないです そういう各自が自由に解釈していいというものではないです

2021-12-04 23:49:16
前へ 1 2 ・・ 10 次へ