9

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

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

这个例子的 (n+1) 部分以某种方式阻止了负数的输入,但我不明白如何。例如.. 如果输入是 (-5),我希望 n 只是 (-6),因为 (-6 + 1) 是 (-5)。测试时的输出如下:

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

谁能向我解释为什么这不接受负数?

4

1 回答 1

10

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

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

n+k 模式的要点是进行归纳,因此您需要使用基本情况(k-1,在本例中为 0)来完成示例,并确定小于该值的参数是否会出错。像这样:

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

您本质上要求的语义将是毫无意义且多余的-您可以说

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

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

于 2010-02-12T00:03:27.947 回答