2010-02-11 45 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

相关问题