加载中...

惰性求值(Lazy Evaluation)是一种求值策略:表达式并不在绑定时立即计算,而是推迟到其结果真正被使用时才求值,且通常只求值一次并缓存结果(记忆化)。与之相对的是及早求值(Eager Evaluation)。
实现上一般将未求值的表达式包装为「延迟对象」(thunk),首次访问时触发计算并以结果替换自身。这使得可以定义无限数据结构(如无限列表),只取用其中有限部分。
Haskell 是默认全面惰性求值的代表语言。其他语言以局部形式提供:Python 的生成器与 itertools、Java 的 Stream、C# 的 LINQ 与 yield、JavaScript 的生成器函数,以及各类框架中的懒加载、按需初始化,都体现惰性思想。短路逻辑运算符也可视为最普及的惰性求值。
优点:避免不必要的计算、支持无限结构、便于组合流水线式操作。缺点:求值时机不直观导致调试困难,未求值的 thunk 堆积可能造成内存暴涨(空间泄漏),与副作用交织时行为难以预测。

登录 后参与讨论
暂无讨论,来发表第一条评论吧