我是学习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
答案 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 * x
或2 * x + 1
。但类型系统并不知道。
答案 2 :(得分:0)
代码的格式有点偏,所以很难知道你在问什么,但你可以使用模式匹配来输入Int类型。一个例子是
add x 0 = x
add x y = x + y