【问题标题】:How to Loop x Times With Functional Style?如何使用功能样式循环 x 次?
【发布时间】:2012-11-15 10:14:39
【问题描述】:

我有这个递归函数:

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

我想执行此循环 100 次。我想使用正确的功能风格。那么,我不能使用计数器吗?因为在函数式编程中为变量分配新值是不合适的。如何在功能上做到这一点?我正在使用 Python。

【问题讨论】:

标签: python functional-programming iteration


【解决方案1】:

您可以递归地执行此操作,并通过添加一个递减(或递增)循环变量。

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

如果您希望它真正具有功能性,则必须返回总体,因为函数式编程不赞成副作用。

【讨论】:

    【解决方案2】:

    例如这样的:

    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)
    

    【讨论】:

      【解决方案3】:

      技术上是这样的:

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

      但这在 Python 中是一件非常非常愚蠢的事情(由于未优化尾调用,除了最小的示例外,所有示例都失败了)。只需使用一个循环,虽然它在后台使用可变状态,但其余程序可以完美运行。

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 1970-01-01
        • 2019-06-19
        • 2017-04-08
        • 1970-01-01
        • 2020-06-01
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多