0

私はこの再帰関数を持っています:

def lifecycle(population):
    ...
    lifecycle(new_population)

このループを100回実行したいです。正しい機能的なスタイルを使いたい。じゃあカウンターは使えないの?関数型プログラミングでは、変数に新しい値を代入することは許可されていないためです。これを機能的にどのように行うのですか?私はPythonを使用しています。

4

3 に答える 3

4

技術的には、次のようになります。

def lifecycle(population, i):
    if i == 100:
        return ...
    ...
    return lifecycle(new_population, i + 1)

しかし、これを Python で行うのは本当にばかげています (末尾呼び出しが最適化されていないため、最小の例を除いてすべて失敗します)。ループを使用するだけで、内部で変更可能な状態を使用しますが、残りのプログラムは完全に機能します。

于 2012-11-27T18:03:12.280 に答える
2

これを再帰的に行い、減少 (または増加) するループ変数を追加します。

def lifecycle(population, n):
    if n == 0:
        return population
    ...
    return lifecycle(new_population, n-1)

関数型プログラミングは副作用に眉をひそめているため、真に関数型にしたい場合は母集団を返さなければなりません。

于 2012-11-27T17:58:09.757 に答える
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)
于 2012-11-27T17:58:39.430 に答える