Haskell 程序检查闰年

haskellserver side programmingprogramming

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


相关文章