1

当我浏览时GHC.List.hs,我遇到了以下定义null

-- | Test whether a list is empty.
null                    :: [a] -> Bool
null []                 =  True
null (_:_)              =  False

我很惊讶第二个等式不简单

null _                  =  False

这个替代等式在语法上是有效的并且不会改变null: 因为第一个模式是空列表,所以只有当参数是非空列表时才会使用第二个模式。此外,在我看来,这个替代方程更简单,更易读。这引出了一个问题:

(_:_)在这里使用模式而不是通配符是否有特殊原因?

(如果这是一种优化形式,请详细说明。)

4

0 回答 0