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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.