Ints上的模式匹配

时间:2015-07-12 04:45:58

标签: function haskell types functional-programming pattern-matching

我是学习Haskell的初学者,我想知道你是否可以像Int那样模式匹配:

 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

3 个答案:

答案 0 :(得分:13)

有一个扩展程序可以让您这样做,但您只需在y上模式匹配,然后手动减去1

add x y = 1 + x + add x (y - 1)

该扩展名称为NPlusKPatterns。如果确实想要使用它(请记住它在haskell 2010中已弃用),可以通过将-XNPlusKPatterns参数传递给GHC或放置{-# LANGUAGE NPlusKPatterns #-}来启用它。位于文件顶部。

答案 1 :(得分:2)

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

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

foo 0 = ...
foo 2 = ...
foo x = ...

但是你不能使用任意表达式。以下代码是非法的:

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

可能知道整数的格式为2 * x2 * x + 1。但类型系统并不知道。

答案 2 :(得分:0)

代码的格式有点偏,所以很难知道你在问什么,但你可以使用模式匹配来输入Int类型。一个例子是

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