13

以下

(&&) :: Bool -> Bool -> Bool
False && _ = False
True && False = False
True && True = True

具有所需的短路特性False && undefined ≡ False。第一个子句在正确的参数中是非严格的,保证在尝试其他任何内容之前进行检查。

显然,如果我更改订单甚至取消功能,它仍然有效

both :: (Bool,Bool) -> Bool
both (True,False) = False
both (True, True) = True
both (False, _) = False

Prelude> both (False, undefined)
False

但这实际上是由标准保证的吗?与子句的顺序不同,模式的评估顺序在这里不是很清楚。我真的可以确定在 snd 元素被评估之前,(True,False)一旦确定匹配就会被中止吗?(False,_)

4

1 回答 1

15
于 2016-10-30T12:29:08.510 回答