📜  函数式编程-惰性评估

📅  最后修改于: 2021-01-07 05:20:34             🧑  作者: Mango


惰性评估是一种评估策略,用于保留对表达式的评估,直到需要其值为止。它避免了重复评估。 Haskell是这种功能性编程语言的一个很好的例子,其基础是基于惰性评估。

Unix映射函数中使用了惰性求值,通过仅从磁盘加载所需的页面来提高其性能。剩余的页面将不会分配内存。

延迟评估-优势

  • 它允许语言运行时丢弃不直接与表达式的最终结果链接的子表达式。

  • 它通过丢弃临时计算和条件来降低算法的时间复杂度。

  • 只要它们没有任何循环依赖关系,它就允许程序员在初始化数据结构后无序访问它们。

  • 最适合加载不经常访问的数据。

惰性评估-缺点

  • 它通过创建thunk (延迟对象)来强制语言运行时保留子表达式的求值,直到最终结果中需要它为止。

  • 有时,它增加了算法的空间复杂度。

  • 很难找到它的性能,因为它在执行之前包含大量表达式。

使用Python的惰性评估

Python的range方法遵循“惰性评估”的概念。它节省了较大范围的执行时间,而且我们一次也不需要所有值,因此也节省了内存消耗。看下面的例子。

r = range(10) 
print(r) 
range(0, 10) 
print(r[3]) 

它将产生以下输出-

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
3