ホームページ > ウェブフロントエンド > jsチュートリアル > 末尾呼び出しの最適化を行わずに関数型プログラミングで While ループを置き換える方法は?

末尾呼び出しの最適化を行わずに関数型プログラミングで While ループを置き換える方法は?

Susan Sarandon
リリース: 2024-10-30 15:59:02
オリジナル
471 人が閲覧しました

 How to Replace While Loops in Functional Programming Without Tail Call Optimization?

末尾呼び出しの最適化を行わずに While ループを関数型プログラミングの代替案に置き換える方法

関数型プログラミングでは、while ループは再帰または再帰に置き換えられることがよくあります。ユーティリティ関数。ただし、再帰呼び出しのオーバーヘッドを削減する末尾呼び出しの最適化がなければ、while ループの機能的な代替手段を見つけるのは困難になる可能性があります。

1 つのアプローチは、「while」ユーティリティ関数を作成することです。ただし、これによりコードがより複雑になる可能性があります。もう 1 つのオプションは、ジェネレーター関数を使用し、ユーティリティ関数を使用してそれらを反復処理することです。ただし、これを実行するための読みやすい方法を見つけるのは難しい場合があります。

最終的に、最適な戦略は特定のシナリオによって異なります。ループが再帰関数として表現できる場合は、再帰が適切なオプションになる可能性があります。そうでない場合は、while ループを使用する方が簡単かもしれません。

JavaScript の例

現在末尾呼び出しの最適化が欠けている JavaScript では、次のスニペットは、 「while」ユーティリティ関数は次のように実装できます。

<code class="javascript">const repeat = n => f => x =>
  n === 0 ? x : repeat (n - 1) (f) (f(x))

console.log(repeat(1e3) (x => x + 1) (0)) // 1000
console.log(repeat(1e5) (x => x + 1) (0)) // Error: Uncaught RangeError: Maximum call stack size exceeded</code>
ログイン後にコピー

この例では、repeat 関数は整数 n、関数 f、および初期値 x を受け取ります。 n がゼロになるまで f を x に繰り返し適用します。末尾呼び出しの最適化を行わないと、大きな n を指定してこの関数を実行すると、スタック オーバーフロー エラーが発生します。

以上が末尾呼び出しの最適化を行わずに関数型プログラミングで While ループを置き換える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート