使用递归反转句子的 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 中,可以使用递归和连接来反转句子。此外,还可以使用列表推导式来反转它。