Function Ints上的模式匹配
我是学习Haskell的初学者,我想知道您是否可以在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上进行模式匹
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支持将其作为扩展。