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