2010-02-11 47 views
9

我對Haskell相當新,但確實掌握了大部分的基礎知識。但有一件事我只是無法弄清楚。考慮我的例子如下:爲什麼我的Haskell函數不接受負數?

example :: Int -> Int 
example (n+1) = ..... 

這個例子的(n + 1)部分以某種方式阻止了負數的輸入,但我無法理解如何。例如..如果輸入是(-5),我希望n只是(-6),因爲(-6 + 1)是(-5)。測試時輸出如下:

Program error: pattern match failure: example (-5)

任何人都可以向我解釋爲什麼這不接受負數?

+8

請注意'n + k'模式將從Haskell語言規範(Haskell 2010)的下一個版本中刪除。據我所知,他們很少用於實踐(雖然我相信有人會找到一個軼事的例子)。所以我建議不要使用它們。 – 2010-02-12 00:16:18

回答

10

這只是如何n+k patterns被定義爲工作:

Matching an n+k pattern (where n is a variable and k is a positive integer literal) against a value v succeeds if x >= k, resulting in the binding of n to x - k, and fails otherwise.

的n + k中的圖案的點是執行感應,因此需要用鹼的情況下(K-1,或0來完成的示例在這種情況下),並決定一個小於這個參數的參數是否是錯誤的。就像這樣:

example (n+1) = ... 
example 0 = ... 

,你基本上是要求將是相當無意義的和冗餘的語義 - 你可以只說

example n = let n' = n-1 in ... 

來達到同樣的效果。模式的要點有時會失敗。

+1

我的講師使用它時未解釋其工作原理或原理。你已經解釋得很好。謝謝。 – 2010-02-12 00:28:33

相關問題