是"在哪里"关键字懒惰?

时间:2015-06-27 15:03:16

标签: haskell lazy-evaluation

假设我有像

这样的功能
foo = 8 + f1
  where f1 = 8 + 9
        f2 = 8 + 10

f1显然必须进行评估,但f2并非必须如此。会不会呢?我可以看到评估每个where表达式是否会成为性能问题。

1 个答案:

答案 0 :(得分:6)

是的,它是懒惰的,因此不会评估f2,例如:

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

将立即计算,如果严格则会永远计算。