函数中的Haskell模式匹配

时间:2018-11-11 17:40:57

标签: haskell

两个参数的函数检查恰好在两个 布尔操作数具有相同的值。否则返回False。 我应该使用:

check :: Bool -> Bool -> Bool

1)-条件表达式(checkA)

checkA x y = if x < y then False else True

- 2)-保护方程(checkB)。

checkB x y | x < y = False  | otherwise =True

3)-模式匹配(checkc)。

,但是在这里我得到一个错误

checkC x y  False False = True
          True True = True
          False True = False
          True False = False

当x和y是数字(int)时,如何使用模式匹配来说(如果这和那等于...)?

1 个答案:

答案 0 :(得分:3)

您可以对布尔型进行模式匹配,因为组合的数量有限(且很少)。考虑Bool s的整个组合空间(定义为n^n,其中n是空间的大小)

False False
False True
True False
True True

check中手工枚举这些内容很简单

check :: Bool -> Bool -> Bool
check False False = True
check False True  = False
check True False  = False
check True True   = True

但是您可以推断,Int并不是那么简单,因为所有整数的空间实际上是无限的。

如果您有无数的编程时间和硬盘空间,则可以用int进行这种模式匹配,因为您要写入的模式无数。

check :: Int -> Int -> Bool
check 0 0 = True
check 1 1 = True
check (-1) (-1) = True
check 2 2 = True
check (-2) (-2) = True
-- etc literally until infinity
check _ _ = False

编写此方法的方法是使用防护:

check :: Int -> Int -> Bool
check x y | x == y    = True
          | otherwise = False

或者意识到已经有一个非常标准的功能可以执行此操作-也许您已经听说过? :-)

check :: Int -> Int -> Bool
check = (==)