Haskell 程序检查闰年
在 Haskell 中,我们可以使用简单的布尔表达式来检查给定年份是否为闰年。闰年是相对于普通年份而言,在 2 月份额外增加一天(2 月 29 日)的年份。
例如,2004 年是闰年。
要确定某一年是否为闰年,必须遵循一些规则。
算法
步骤 1 − 定义 isLeapYear 函数
步骤 2 − 程序执行将从 main 函数开始。main() 函数控制整个程序。它被写成 main = do。在 main 函数中,定义了一个年份值并将其传递给 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 天)。