Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Ints上的模式匹配_Function_Haskell_Types_Functional Programming_Pattern Matching - Fatal编程技术网

Function Ints上的模式匹配

Function Ints上的模式匹配,function,haskell,types,functional-programming,pattern-matching,Function,Haskell,Types,Functional Programming,Pattern Matching,我是学习Haskell的初学者,我想知道您是否可以在Ints上进行模式匹配,如下所示: add x 0 = x add x (1 + y) = 1 + x + add x y, 或者可能是这样: add x 0 = x add x (successor y) = 1 + x + add x y 代码的格式有点不正确,因此很难知道您在问什么,但您可以使用模式匹配来输入Int类型 add x 0 = x add x y = x + y 有一个扩展允许您这样做,但您只需在y上进行模式匹

我是学习Haskell的初学者,我想知道您是否可以在
Int
s上进行模式匹配,如下所示:

 add x 0 = x
 add x (1 + y) = 1 + x  + add x y,
或者可能是这样:

 add x 0 = x
 add x (successor y) = 1 + x + add x y

代码的格式有点不正确,因此很难知道您在问什么,但您可以使用模式匹配来输入Int类型

add x 0 = x
add x y = x + y

有一个扩展允许您这样做,但您只需在
y
上进行模式匹配,然后手动减去
1

addxy=1+x+addx(y-1)

扩展名为
NPlusKPatterns
。如果您真的想使用它(请记住它在haskell 2010中已被弃用),可以通过将
-XNPlusKPatterns
参数传递给GHC,或者将
{-#语言NPlusKPatterns}
放在文件顶部来启用它。

模式匹配不是任意的案例分析。这是一种严格但有限的案例分析形式,其中案例是数据类型的构造函数

在模式匹配整数的特定情况下,构造函数被视为整数值。因此,您可以使用整数值作为模式匹配的示例:

foo 0 = ...
foo 2 = ...
foo x = ...
但不能使用任意表达式。以下代码是非法的:

foo (2 * x) = ...
foo (2 * x + 1) = ...

您可能知道,任何整数的形式都是
2*x
2*x+1
。但是类型系统不知道。

如果你觉得下面有一个合适的答案,请考虑通过点击滴答声来接受它,@ USE12596公平,在Haskel98中你可以匹配<代码>(X+ 5)< /代码>,这样的匹配将失败数小于5,并且对所有其他数字成功和减去5。该功能被发现无用,并从Haskell 2010中删除,GHC支持将其作为扩展。