“where”关键字是惰性的吗?

4
在假设我有一个函数如下的前提下:
foo = 8 + f1
  where f1 = 8 + 9
        f2 = 8 + 10

f1 显然需要进行评估,但 f2 不需要。不过它会被评估吗?我可以看出每个 where 表达式的评估都会导致性能问题。

1个回答

6

是的,这很懒,因此f2将不会被评估,例如:

foo = 8 + f1
    where f1 = 8 + 9
          f2 = last [1..]

将会立即计算,如果是严格的话会花费很长时间。


1
值得注意的是,有趣的是,它明确定义了如何构造thunk,因此您可以使用它更改某些函数的行为,例如foldl' - AJF
@AJFarmar,听起来很有趣,你能否提供更多详细信息的链接吗? - bereal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接