1. ホーム
  2. パイソン

[解決済み】なぜPythonは関数型プログラミングにあまり向いていないのでしょうか?[終了] Pythonはなぜ関数型プログラミングに向かないのか?

2022-03-26 07:27:53

質問

私は常々、関数型プログラミングはPythonでできると思っています。そのため、Pythonが以下の記事であまり言及されていないことに驚きました。 これ の質問で、言及されたとしても、通常はあまり肯定的なものではありませんでした。しかし、その理由は多くは語られませんでした(パターンマッチングの欠如や代数的なデータ型が挙げられました)。そこで質問ですが、なぜPythonは関数型プログラミングにあまり向いていないのでしょうか?パターンマッチングや代数的データ型がないこと以外にも理由があるのでしょうか?それとも、これらの概念は関数型プログラミングにとって非常に重要で、これらをサポートしない言語は二流の関数型プログラミング言語としか分類されないのでしょうか? (私の関数型プログラミングの経験は非常に限られていることに留意してください)。

どうすれば解決するの?

あなたが参照した質問は、OOと関数型プログラミングの両方を促進する言語はどれか、というものです。Pythonはそうではありません 促進する 関数型プログラミングは 作品 はかなり良い。

最強の議論 に対して Pythonの関数型プログラミングは、Guidoによって命令型/オブジェクト指向のユースケースが慎重に検討されるのに対し、関数型プログラミングのユースケースは検討されないということです。私が命令型Pythonを書くとき、それは私が知っている言語の中で最も美しいものの1つです。私が関数型Pythonを書くとき、それは私が知っている中で最も美しい言語の1つです。 BDFL .

それが悪いというわけではなく、関数型プログラミングを推進する言語に切り替えたり、OO Pythonを書くことに切り替えたりする場合よりも努力しなければならない、というだけのことなのです。

私がPythonで恋しいと思う機能的な事柄を紹介します。


  • パターンマッチも末尾再帰もないため、基本的なアルゴリズムは必然的に書かなければなりません。Pythonでは再帰は醜いし遅い。
  • リストライブラリが少なく、関数型辞書がないため、多くのものを自分で書かなければならない。
  • currying や合成のための構文がないため、ポイントフリースタイルは明示的に引数を渡すのと同じくらい句読点でいっぱいになってしまいます。
  • 遅延リストの代わりにイテレータを使用すると、効率性と持続性のどちらを重視するかを判断する必要があり、そのためには list 永続性が必要な場合は (イテレータは一度だけ使うものです。)
  • Pythonの単純な命令文と単純なLL1パーサーは、if式とラムダ式のためのより良い構文が基本的に不可能であることを意味します。Guidoはこの方法を好んでいますし、私は彼が正しいと思います。