[解決済み】なぜPythonは関数型プログラミングにあまり向いていないのでしょうか?[終了] Pythonはなぜ関数型プログラミングに向かないのか?
質問
私は常々、関数型プログラミングはPythonでできると思っています。そのため、Pythonが以下の記事であまり言及されていないことに驚きました。 これ の質問で、言及されたとしても、通常はあまり肯定的なものではありませんでした。しかし、その理由は多くは語られませんでした(パターンマッチングの欠如や代数的なデータ型が挙げられました)。そこで質問ですが、なぜPythonは関数型プログラミングにあまり向いていないのでしょうか?パターンマッチングや代数的データ型がないこと以外にも理由があるのでしょうか?それとも、これらの概念は関数型プログラミングにとって非常に重要で、これらをサポートしない言語は二流の関数型プログラミング言語としか分類されないのでしょうか? (私の関数型プログラミングの経験は非常に限られていることに留意してください)。
どうすれば解決するの?
あなたが参照した質問は、OOと関数型プログラミングの両方を促進する言語はどれか、というものです。Pythonはそうではありません 促進する 関数型プログラミングは 作品 はかなり良い。
最強の議論 に対して Pythonの関数型プログラミングは、Guidoによって命令型/オブジェクト指向のユースケースが慎重に検討されるのに対し、関数型プログラミングのユースケースは検討されないということです。私が命令型Pythonを書くとき、それは私が知っている言語の中で最も美しいものの1つです。私が関数型Pythonを書くとき、それは私が知っている中で最も美しい言語の1つです。 BDFL .
それが悪いというわけではなく、関数型プログラミングを推進する言語に切り替えたり、OO Pythonを書くことに切り替えたりする場合よりも努力しなければならない、というだけのことなのです。
私がPythonで恋しいと思う機能的な事柄を紹介します。
- パターンマッチ
- テールリカーシオン
- リスト関数の大規模なライブラリ
- 機能性辞書クラス
- 自動カリー化
- 関数の簡潔な合成方法
- レイジーリスト
- シンプルで強力な式構文(Pythonのシンプルなブロック構文がGuidoの追加を阻んでいます。)
- パターンマッチも末尾再帰もないため、基本的なアルゴリズムは必然的に書かなければなりません。Pythonでは再帰は醜いし遅い。
- リストライブラリが少なく、関数型辞書がないため、多くのものを自分で書かなければならない。
- currying や合成のための構文がないため、ポイントフリースタイルは明示的に引数を渡すのと同じくらい句読点でいっぱいになってしまいます。
-
遅延リストの代わりにイテレータを使用すると、効率性と持続性のどちらを重視するかを判断する必要があり、そのためには
list
永続性が必要な場合は (イテレータは一度だけ使うものです。) - Pythonの単純な命令文と単純なLL1パーサーは、if式とラムダ式のためのより良い構文が基本的に不可能であることを意味します。Guidoはこの方法を好んでいますし、私は彼が正しいと思います。
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] なぜ関数型言語なのか?[クローズド]
-
[解決済み] Javascriptは関数型プログラミング言語か?