使用遞迴反轉句子的 Haskell 程式
在 Haskell 中,我們可以使用遞迴和連線來反轉句子,也可以使用列表推導式。在第一個示例中,我們將使用遞迴以及基本情況和遞迴情況,在第二個示例中,我們將使用連線作為 ((last sentence) : reverseSentence (init sentence)),在第三個示例中,我們將使用列表推導式,如 reverseSentence s = [s !! i | i <- [len-1, len-2..0]] 。
演算法
步驟 1 − 定義使用者自定義的遞迴 reverseSentence 函式,如:
例如 1 −
reverseSentence [] = [] reverseSentence (x:xs) = reverseSentence xs ++ [x].
例如 2 −
reverseSentence [] = [] reverseSentence sentence = (last sentence) : reverseSentence (init sentence).
例如 3 −
reverseSentence s = [s !! i | i <- [len-1, len-2..0]] where len = length s.
步驟 2 − 程式執行將從主函式開始。main() 函式控制整個程式。它被寫成 main = do。主函式呼叫 reverseSentence 函式來反轉字串 "Hello World!"。
步驟 3 − 命名為“sentence”的變數正在初始化。它將儲存需要反轉的句子。
步驟 4 − 在函式呼叫後,使用“print”函式將反轉後的結果句子列印到控制檯。
示例 1
在這個示例中,reverseSentence 函式以字串作為輸入,並使用遞迴來反轉字串中字元的順序。遞迴的基本情況是當輸入字串為空時,在這種情況下,函式返回一個空字串。在遞迴情況下,函式使用輸入字串減去第一個字元來呼叫自身,然後將輸入字串的第一個字元連線到遞迴呼叫返回的反轉字串的末尾。
reverseSentence :: String -> String reverseSentence [] = [] reverseSentence (x:xs) = reverseSentence xs ++ [x] main :: IO () main = do let sentence = "Hello World!" print (reverseSentence sentence)
輸出
"!dlroW olleH"
示例 2
在這個示例中,reverseSentence 函式接收一個字串並使用遞迴來反轉它。基本情況是當輸入字串為空時,在這種情況下,函式返回一個空字串。遞迴情況是當輸入字串不為空時,將句子的最後一個字元連線到使用 init 函式反轉其餘句子(不包括最後一個字元)的結果。
reverseSentence :: String -> String reverseSentence [] = [] reverseSentence sentence = (last sentence) : reverseSentence (init sentence) main :: IO () main = do let sentence = "Hello World!" print (reverseSentence sentence)
輸出
"!dlroW olleH"
示例 3
在這個示例中,列表推導式用於透過向後迭代字串並將每個字元追加到最終結果來反轉句子。
reverseSentence :: String -> String reverseSentence s = [s !! i | i <- [len-1, len-2..0]] where len = length s main :: IO () main = do let sentence = "Hello World!" print (reverseSentence sentence)
輸出
"!dlroW olleH"
結論
在 Haskell 中,可以使用遞迴和連線來反轉句子。此外,還可以使用列表推導式來反轉它。