为什么我的Haskell函数不接受负数?

Jon*_*ike 9 recursion haskell negative-number

我对Haskell相当新,但确实掌握了大部分基础知识.然而,有一件事我无法弄清楚.考虑下面的例子:

example :: Int -> Int
example (n+1) = .....
Run Code Online (Sandbox Code Playgroud)

这个例子的(n + 1)部分以某种方式阻止输入负数但我无法理解如何.例如..如果输入为(-5),我认为n只是(-6),因为(-6 + 1)是(-5).测试时的输出如下:

程序错误:模式匹配失败:示例(-5)

任何人都可以向我解释为什么这不接受负数?

Jos*_*Lee 10

这就是如何定义n + k模式的工作方式:

如果x> = k,则将n + k模式(其中n是变量,k是正整数文字)与值v匹配成功,导致n与x-k的绑定,否则失败.

n + k模式的要点是执行归纳,因此您需要使用基本情况(在这种情况下为k-1或0)完成示例,并确定小于该参数的参数是否是错误.像这样:

example (n+1) = ...
example 0 = ...
Run Code Online (Sandbox Code Playgroud)

你基本上要求的语义将是毫无意义和多余的 - 你可以这么说

example n = let n' = n-1 in ...
Run Code Online (Sandbox Code Playgroud)

达到同样的效果.模式的重点有时会失败.