Haskell 检查Bool的可除性总是导致false
我试图检查闰年,也就是“可以被400整除或被4整除但不能被100整除的年份”。删除其中一个条件仍然不能返回实际闰年的真实值。只有元组中的z值计入可分性,但这些条件不会返回实际闰年的真实值Haskell 检查Bool的可除性总是导致false,haskell,Haskell,我试图检查闰年,也就是“可以被400整除或被4整除但不能被100整除的年份”。删除其中一个条件仍然不能返回实际闰年的真实值。只有元组中的z值计入可分性,但这些条件不会返回实际闰年的真实值 checkLeap :: (Int, Int, Int) -> Bool checkLeap (x,y,z) | z == 400 `mod` 1 = True | z == 4 `mod` 1 && z /= 100 `mod` 1 = Tru
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
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
这里看起来有些混乱:
z==400`mod`1
应该是z`mod`400==0
当然?其他人也是如此。当你只关心z
时,为什么要使用三元组(x,y,z)
?如果函数只需要最后一个元素,为什么还要使用元组?@Cubic它可能就好像有一个类型Date=(Int,Int,Int)
表示月、日、年或其他什么。该死,我知道它使用mod
错误。非常感谢你!我觉得自己像个白痴。