跳转到内容

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
华夏公益教科书