检查布尔的可除性总是导致错误

时间:2019-03-18 00:16:38

标签: haskell

我正在尝试检查leap年,即“可以被400整除或可以被4整除但不能被100整除的年份”。在实际的leap年中,删除其中一个条件仍未返回真。元组中只有z值计入可除性,但这些条件对于实际的leap年永远不会返回True值。

checkLeap :: (Int, Int, Int) -> Bool
checkLeap (x,y,z)
  | z == 400 `mod` 1                   = True
  | z == 4 `mod` 1 && z /= 100 `mod` 1 = True
  | otherwise                          = False

1 个答案:

答案 0 :(得分:4)

mod在可以被整除时为0,并且在Haskell中也不能一路走到尽头。尝试以下方法:

checkLeap :: (Int, Int, Int) -> Bool
checkLeap (x,y,z)
  | z `mod` 400 == 0                   = True
  | z `mod` 4 == 0 && z `mod` 100 /= 0 = True
  | otherwise                          = False