私は関数型プログラミングが初めてなので、関数型アプローチを使用して解決するのが難しい問題もあります。
1 から 10.000 までの数字のリストがあり、最大で n (100 としましょう) まで合計されるリストの項目を取得したいとします。そのため、合計が 100 を超えるまで数値を取得します。
命令型プログラミングでは、この問題を解決するのは簡単です。なぜなら、各対話で変数を保持し、目的が達成されたら停止できるからです。
しかし、関数型プログラミングで同じことを行うにはどうすればよいでしょうか? sum 関数は完成したリストで動作するので、まだ完成したリストを持っていません。どうすれば計算を「続行」できますか?
合計が遅延計算された場合、次のように書くことができます。
(1 to 10000).sum.takeWhile(_ < 100)
PS:どんな回答でもありがたいのですが、速度に関しては明らかに命令型バージョンの方がはるかに最適であるため、毎回合計を計算しないものを希望します。
編集:
命令型ループのアプローチを機能的な再帰関数に「変換」できることを知っています。既存のライブラリ関数の 1 つを使用して、何かが必要になるたびにライブラリ関数を作成しない方法を提供できるかどうかを調べることにもっと興味があります。