Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 检查Bool的可除性总是导致false_Haskell - Fatal编程技术网

Haskell 检查Bool的可除性总是导致false

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

我试图检查闰年,也就是“可以被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 = 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
错误。非常感谢你!我觉得自己像个白痴。