跳轉到內容

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
華夏公益教科書