Haskell 程序检查闰年
在 Haskell 中,我们可以使用简单的布尔表达式来检查给定年份是否为闰年。闰年是比正常年份多一天(2 月 29 日)的年份。
例如,2004 年是闰年。
要确定某一年是否为闰年,必须遵循一些规则。
算法
步骤 1 - 定义 isLeapYear 函数
步骤 2 - 程序执行将从主函数开始。main() 函数完全控制程序。它写为 main = do。在主函数中,定义一个年份值并将其传递给 isLeapYear 函数。然后打印函数的结果。
步骤 3 - 初始化名为"year"的变量。它将保存要检查是否为闰年的年份。
步骤 4 - 然后,在调用函数后,使用 if else 语句通过"putStrLn"语句将结果打印到控制台。
示例 1
在此示例中,isLeapYear 函数以整数(代表年份)作为输入,并返回一个布尔值,指示该年份是否为闰年。它使用模式匹配根据以下规则确定年份是否为闰年 -
如果年份可以被 400 整除,则为闰年。
如果年份可以被 100 整除但不能被 400 整除,则不是闰年。
如果年份可以被 4 整除但不能被 100 整除,则为闰年。
如果上述条件均不满足,则不是闰年。
isLeapYear :: Int -> Bool isLeapYear year | year `mod` 400 == 0 = True | year `mod` 100 == 0 = False | year `mod` 4 == 0 = True | otherwise = False main :: IO () main = do let year = 2004 if isLeapYear year then putStrLn $ show year ++ " is a leap year." else putStrLn $ show year ++ " is not a leap year."
输出
2004 is a leap year.
示例 2
此示例使用单个布尔表达式来确定年份是否为闰年。它检查年份是否能被 4 整除,是否不能被 100 整除,或者是否能被 400 整除。此实现更简洁,使用的代码行更少。结果与原始实现相同,但逻辑表达更简洁。
isLeapYear :: Int -> Bool isLeapYear year = (year `mod` 4 == 0) && (year `mod` 100 /= 0 || year `mod` 400 == 0) main :: IO () main = do let year = 2004 if isLeapYear year then putStrLn $ show year ++ " is a leap year." else putStrLn $ show year ++ " is not a leap year."
输出
2004 is a leap year.
结论
在 Haskell 中,我们可以定义一个函数来确定某一年是否是闰年,使用以下规则 -
如果年份可以被 4 整除,则转到步骤 2。否则,转到步骤 5。
如果年份可以被 100 整除,则转到步骤 3。否则,转到步骤 4。
如果年份可以被 400 整除,则转到步骤 4。否则,转到步骤 5。
该年份是闰年(有 366 天)。
该年份不是闰年(有 365 天)。