【发布时间】:2011-11-28 13:56:06
【问题描述】:
例如,我有一个操作 fnB :: a -> Bool,在 fnA :: Bool 返回 False 之前没有任何意义。在 C 语言中,我可以将这两个操作组合在一个 if 块中:
if( fnA && fnB(a) ){ doSomething; }
并且 C 将保证 fnB 在 fnA 返回 false 之前不会执行。
但是 Haskell 是懒惰的,而且通常不能保证什么操作会先执行,直到我们不使用 seq、$! 或其他东西来使我们的代码变得严格。一般来说,这就是我们需要快乐的东西。但是使用&& 运算符,我希望fnB 在fnA 返回其结果之前不会被评估。 Haskell 是否通过&& 提供这样的保证?即使 fnA 返回 False,Haskell 是否会评估 fnB?
【问题讨论】:
标签: haskell logical-operators strictness