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 天)。

更新于: 2023 年 4 月 25 日

502 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告