7

通常関数型言語に関連付けられている手法またはパラダイムは、命令型言語でも生産的に使用できますか?

例えば:

  • 再帰は、テールコール最適化のない言語では問題になる可能性があり、その使用は限られたケースのセットに制限されるため、有用性は限られています
  • マップとフィルターは、関数型の感覚を持っているにもかかわらず、非関数型言語への道を見つけました

私はたまたま、関数型言語の状態について心配する必要がないのが本当に好きです。私が特に頑固だったら、変数を変更せずに、関数に渡される変数と関数から返される値に自分の状態をカプセル化するだけで、C プログラムを書くかもしれません。

関数はファーストクラスの値ではありませんが、Java のオブジェクトで関数をラップして、それを別のメソッドに渡すことができます。関数型プログラミングと同様に、楽しくありません。

それでは、関数型プログラミングのベテランにとって、命令型言語でプログラミングする場合、FP のどのアイデアをうまく​​適用できますか?

4

5 に答える 5

11

ほぼ全員?

関数型言語を理解していれば、関数型スタイルによって「情報を得た」命令型プログラムを作成できます。これにより、副作用から離れ、特定のポイントでプログラムのテキストを読むだけで、そのポイントでプログラムの意味が何であるかを本当に知ることができるプログラムへと導かれます。

ドーン オブ タイムの頃、私たちは「カップリング」と「結合」について心配していました。FP を学習すると、最適な (最小の) カップリングと高い結束を持つシステムを書くことができます。

于 2009-02-25T02:43:25.210 に答える
6

非FP言語でFPを実行する際に邪魔になるものは次のとおりです。

  • 言語がラムダ/クロージャをサポートしておらず、簡単にハッキングするための構文糖衣がない場合、あなたは水中で死んでいます。クロージャなしでmap/filterを呼び出さないでください。
  • 言語が静的に型付けされており、ジェネリックスをサポートしていない場合、あなたは水中で死んでいます。すべての優れたFPのものは一般性を使用します。
  • 言語が末尾再帰をサポートしていない場合、あなたは妨げられます。たとえば、「map」の実装を繰り返し記述できます。また、多くの場合、データは大きすぎず、再帰は問題ありません。
  • 言語が代数的データ型とパターンマッチングをサポートしていない場合は、少し妨げられます。一度味わったら持っていないのは面倒です。
  • 言語が型クラスを表現できない場合は、まあ、まあ...あなたは通り抜けますが、それがこれまでで最も素晴らしい機能であるだけでなく、Haskellが優れたサポートを備えた唯一のリモートで人気のある言語である場合は気にしないでください。
于 2009-02-25T05:04:04.060 に答える
3

私は高階関数、特に返される種類ではなく渡される種類の関数をうまく使用してきました。返される種類は少し面倒ですが、シミュレートできます。

命令型言語では、あらゆる種類の適用可能なデータ構造と再帰関数がうまく機能します。

私が最も恋しいもの:

  • すべての末尾呼び出しを最適化することを保証する命令型言語はほとんどありません。

  • パターン マッチングによるケース分析をサポートする命令型言語を私は知りません。

于 2009-02-26T03:42:41.877 に答える
0

これが古い質問であることは承知していますが、例を含む回答は、infoQ のこのビデオで詳しく説明されています。

于 2012-01-17T04:12:16.043 に答える