两个参数的函数检查恰好在两个 布尔操作数具有相同的值。否则返回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)时,如何使用模式匹配来说(如果这和那等于...)?
答案 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 = (==)