私はこの再帰関数を持っています:
def lifecycle(population):
...
lifecycle(new_population)
このループを100回実行したいです。正しい機能的なスタイルを使いたい。じゃあカウンターは使えないの?関数型プログラミングでは、変数に新しい値を代入することは許可されていないためです。これを機能的にどのように行うのですか?私はPythonを使用しています。
私はこの再帰関数を持っています:
def lifecycle(population):
...
lifecycle(new_population)
このループを100回実行したいです。正しい機能的なスタイルを使いたい。じゃあカウンターは使えないの?関数型プログラミングでは、変数に新しい値を代入することは許可されていないためです。これを機能的にどのように行うのですか?私はPythonを使用しています。
技術的には、次のようになります。
def lifecycle(population, i):
if i == 100:
return ...
...
return lifecycle(new_population, i + 1)
しかし、これを Python で行うのは本当にばかげています (末尾呼び出しが最適化されていないため、最小の例を除いてすべて失敗します)。ループを使用するだけで、内部で変更可能な状態を使用しますが、残りのプログラムは完全に機能します。
これを再帰的に行い、減少 (または増加) するループ変数を追加します。
def lifecycle(population, n):
if n == 0:
return population
...
return lifecycle(new_population, n-1)
関数型プログラミングは副作用に眉をひそめているため、真に関数型にしたい場合は母集団を返さなければなりません。
たとえば、次のようなものです。
def lifecycle(population, n, maxN):
if n >= maxN: return
new_population = population
lifecycle(new_population, n+1, maxN)
lifecycle(['an initial population or something'], 0, 1000)