関数型プログラミングが『銀の弾丸』であるという非常識な常識2022への意見・感想と作者の反応

「関数型プログラミングが『銀の弾丸』であるという非常識な常識2022」という記事への感想ですが、それに対して誹謗中傷をしています
3
mod_poppo @mod_poppo

Twitter上の「関数型プログラミング」関連の治安の悪さが臨界点を突破したらしい

2021-12-10 12:36:08
mod_poppo @mod_poppo

関数型プログラミング界隈で話題沸騰中の文書を読んでいきたいと思います

2021-12-10 12:58:07
mod_poppo @mod_poppo

第1節:まず、「2022年現在」という記述から著者は未来人であることが推察されます。あるいは俺が寝てる間に2022年になっていたのかもしれない。

2021-12-10 13:00:03
mod_poppo @mod_poppo

@Ken74047924 単なる先取りだったんですね。うっかり寝過ごして新年になったのかと思って焦りました!

2021-12-10 13:09:13
mod_poppo @mod_poppo

第3節:JavaScriptコードのreduceに初期値を指定していないのはどういう意図だろう?Haskellとかのfold関数は普通初期値を指定するものだが。

2021-12-10 13:10:33
すごいHaskellたのしく学ぼう!

MiranLipovaca,田中英行,村主崇行

mod_poppo @mod_poppo

@Ken74047924 私はHaskellでAtCoderに参戦して(アルゴリズムを色々書いて)ある程度の実績を出したり、Haskell処理系のGHCに貢献したり、Standard MLで自作コンパイラーを描いたりしていますが、それも「薄っぺらい」とおっしゃいますか

2021-12-10 13:19:07
mod_poppo @mod_poppo

第4節:二項演算子(というか中置記法)いいよね。SMLだと修飾された名前が中置にできなくてイライラする。

2021-12-10 13:29:46
mod_poppo @mod_poppo

@Ken74047924 @fumieval 果たして、他人を「薄っぺらい」とか言って誹謗中傷しているのはどちらでしょうね?

2021-12-10 13:31:16
mod_poppo @mod_poppo

第5節:「〜のオブジェクトは、数学の集合(Sets)に相当し」←どこが? 「メソッドは、数学の二項演算子に相当しており」←concatの例だけからそれを言うのは論理の飛躍では?

2021-12-10 13:40:57
mod_poppo @mod_poppo

第5節:「二項演算子を活用するという根幹の目的」:関数型プログラミングの話かと思っていたらいつの間にか二項演算子原理主義になっていた

2021-12-10 13:44:46
mod_poppo @mod_poppo

JavaScriptに演算子オーバーロードを期待するのは難しいのだから、演算子オーバーロードが欲しければaltJSを作る方が筋がいいと思うなあ。著者との見解の相違ってやつ。

2021-12-10 13:46:55
mod_poppo @mod_poppo

第5節:initialValueを取らないと(配列が空の時に)まともに動作しないreduceを「二項演算子」と言い張るのは無理がある。

2021-12-10 13:56:25
mod_poppo @mod_poppo

@Ken74047924 現実問題としてJavaScriptのreduceは空配列にinitialValueが指定されないとTypeErrorを投げる(自動で単位元を追加してくれない)ので、そう主張したいのであればJavaScriptじゃない言語、独自の言語を作ってください。

2021-12-10 14:11:04
mod_poppo @mod_poppo

第7節:JavaScriptでパターンマッチするライブラリーがあるのか……。あと、パターンマッチは「マッチさせる式」と「パターン」「マッチした場合の処理」の3つの構成要素があると思うんだけど、それも二項演算として解釈するのか

2021-12-10 14:21:05
mod_poppo @mod_poppo

@Ken74047924 特にコメントが思い浮かばなかっただけで、読み飛ばしているわけではありません。ご心配なく。

2021-12-10 14:30:20
mod_poppo @mod_poppo

第8節:「natural(4)という別の値に交換してもコードが壊れないことは事前によくわかっている」→natural(0)にしたら壊れるんだよなあ

2021-12-10 14:33:51
mod_poppo @mod_poppo

内心fumievalさんも結構攻撃的だよなあと思っていて、最初の「治安が悪い」はそれも含めてのつもりだったけど、Ken氏も負けず劣らず攻撃的だったね(他人を「薄っぺらい」とか「半端者」とか言ってさあ)

2021-12-10 14:43:41
mod_poppo @mod_poppo

reduceの堅牢な使い方もしてないのにコードの堅牢性を語られても説得力がなあ

2021-12-10 14:47:48
mod_poppo @mod_poppo

@Ken74047924 自然数を1以上とするのはいいでしょう。そういう流儀もあります。では空配列は配列に含みますか?空配列に「二項演算として」reduceを適用するとTypeErrorが出ますが、空配列は配列に含めないということでしょうか?

2021-12-10 14:53:15
mod_poppo @mod_poppo

第9節:「型(Type)とは集合(Set)のことです。」ほーん

2021-12-10 14:55:11
mod_poppo @mod_poppo

第10節:TypeScriptで関数の行先を指定するのに使うのはtype annotationで、普通はtype assertion(as)は使わなくないか

2021-12-10 15:02:17
mod_poppo @mod_poppo

第10節では自然数を「0以上」としているな

2021-12-10 15:03:41
mod_poppo @mod_poppo

第13節:f(x)だとネストした時にカッコが多くなって大変だ。うんうん。だから独自のパイプライン記法でP(3)['>'](f)['>'](g)と書く、と。カッコが多いのはどっちだ?

2021-12-10 15:18:14
mod_poppo @mod_poppo

13.5: PとかcustomType, customOperatorの定義はどこかな?そう言うライブラリーがあるのだろうか。

2021-12-10 15:23:56