Haskell程式檢查迴文
本教程將幫助我們使用 Haskell 中的使用者自定義函式和布林函式來檢查任何數字是否為迴文數。迴文數是指其數字反轉後仍保持不變的數字。以下示例將使您清楚地瞭解迴文數。
例如,121、12321 和 1221 是迴文數,而 123、1234 和 1212 不是。
演算法
步驟 1 − 使用反轉函式定義 isPalindrome 函式,isPalindrome str = str == reverse str。
步驟 2 − 程式執行將從 main 函式開始。main() 函式控制整個程式。它被寫成 main = do。在 main 函式中,傳遞一個字串,然後將其傳遞給 isPalindrome 函式。函式的結果用於列印訊息,指示字串是否為迴文。
步驟 3 − 變數名為“str”,它將儲存要檢查的字串,判斷其是否為迴文數。
步驟 4 − 呼叫函式後,使用 ‘putStrLn’ 語句將結果列印到控制檯。
示例 1
在這個示例中,isPalindrome 函式接受一個字串作為輸入,如果字串是迴文(即正反讀相同),則返回 True,否則返回 False。該函式使用 reverse 函式反轉輸入字串,並將其與原始字串進行比較。如果它們相等,則該字串是迴文,否則不是。
isPalindrome :: String -> Bool isPalindrome str = str == reverse str main :: IO () main = do let str = "1331" if isPalindrome str then putStrLn "The string is a palindrome." else putStrLn "The string is not a palindrome."
輸出
The string is a palindrome.
示例 2
在這個示例中,isPalindrome 函式檢查輸入字串是否為空或僅包含單個字元,如果是,則返回 True,因為此類字串根據定義是迴文。如果輸入字串較長,則檢查第一個和最後一個字元是否相等,如果是,則遞迴呼叫 isPalindrome 函式處理其餘字串(不包括第一個和最後一個字元)。如果這兩個條件都滿足,則輸入字串是迴文,函式返回 True。否則,它返回 False。
isPalindrome :: String -> Bool isPalindrome [] = True isPalindrome [_] = True isPalindrome (x:xs) = (x == last xs) && isPalindrome (init xs) main :: IO () main = do let str = "1331" if isPalindrome str then putStrLn "The string is a palindrome." else putStrLn "The string is not a palindrome."
輸出
The string is a palindrome.
示例 3
在這個示例中,isPalindrome 函式使用列表推導式建立一個從輸入字串的開頭和結尾建立的對應字元對列表。然後使用 all 函式檢查所有這些對是否相等。如果所有對都相等,則輸入字串是迴文,函式返回 True。否則,它返回 False。
isPalindrome :: String -> Bool isPalindrome str = all (\(x,y) -> x == y) [(str !! i, str !! (len-i-1)) | i <- [0..(len `div` 2)]] where len = length str main :: IO () main = do let str = "1331" if isPalindrome str then putStrLn "The string is a palindrome." else putStrLn "The string is not a palindrome."
輸出
The string is a palindrome.
結論
在 Haskell 中,我們可以使用帶反轉函式、列表推導式或遞迴的使用者自定義函式來檢查數字是否為迴文。