Haskell/解决方案/后续步骤
外观
练习 |
---|
从第二版 pts 到第三版,我们稍微作弊了一下:它们并不完全相同。你能发现它们的区别吗? |
区别在于当参数小于 1
时会发生什么。在第二版和第三版中,它们都只会在最后匹配(分别由通配符模式 _
和 x
)。在第二版中,最后的结果直接计算为 0
。然而,在第三版中,还有 x <= 6
条件,当参数小于 1
时,显然是成立的;因此结果将是 7 - x
。因此,例如 pts (-4)
在第二版中计算为 0
,而在第三版中计算为 11
。
注意:在文本的脚注中,我们声称对于这个例子,我们不会太担心如果 pts
被赋予了无意义的输入会发生什么;尽管如此,像这样的极端情况是我们在编写“真实”代码时容易犯错的一种情况。换句话说:它可能会对你的程序造成影响,所以要保持警惕。
以下是对第三版的变体,它与第二版完全等效
pts :: Int -> Int
pts 1 = 10
pts 2 = 6
pts x
| x < 1 || x > 7 = 0
| otherwise = 7 - x