我对 Haskell 相当陌生,但确实掌握了大部分基础知识。但是,有一件事我无法弄清楚。考虑下面我的例子:
example :: Int -> Int
example (n+1) = .....
这个例子的 (n+1) 部分以某种方式阻止了负数的输入,但我不明白如何。例如.. 如果输入是 (-5),我希望 n 只是 (-6),因为 (-6 + 1) 是 (-5)。测试时的输出如下:
程序错误:模式匹配失败:示例(-5)
谁能向我解释为什么这不接受负数?
我对 Haskell 相当陌生,但确实掌握了大部分基础知识。但是,有一件事我无法弄清楚。考虑下面我的例子:
example :: Int -> Int
example (n+1) = .....
这个例子的 (n+1) 部分以某种方式阻止了负数的输入,但我不明白如何。例如.. 如果输入是 (-5),我希望 n 只是 (-6),因为 (-6 + 1) 是 (-5)。测试时的输出如下:
程序错误:模式匹配失败:示例(-5)
谁能向我解释为什么这不接受负数?
这就是定义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 ...
达到同样的效果。模式的重点是有时会失败。