如何在 haskell 中编写反向单词函数

how to write an reversed words function in haskell

编写一个程序,在无限循环中读取文本,每个单词 翻过来然后放回原处作为文本。如果输入为空,程序应该 中止,停止。 为此,编写一个 reverseWords::String -> String 函数来执行反转 正在工作。

例如:

reverseWords "Hello World, 123" -> "olleH ,dlroW 321"

我的代码

reverseWords :: String -> String 
reverseWords = unwords . reverse . words

不起作用

函数 reverse 反转整个列表,因此您得到的单词顺序相反。相反,您想要的是分别反转 每个元素 ,可以用 map:

修复
reverseWords = unwords . map reverse . words

如果您需要保留 ' ' 以外的间距字符,那么事情就会变得有点棘手。幸运的是,split 软件包可以提供帮助。

import Data.List.Split
import Data.Char

reverseWords :: String -> String
reverseWords = concatMap reverse . split (whenElt isSpace)