我正在尝试编写以下形式的函数:
f :: String -> [String]
f st = ...
它应该显示字符串中所有可能的字符转置。 例如:
ghci> f "string"
["tsring","srting","stirng","strnig","strign"]
正如您所看到的那样,它应该仅使用当前字符转置下一个字符。 我目前有:
f :: String -> [String]
f [] = []
f (x:xs) = ...
但我不知道如何实际转置字符。
答案 0 :(得分:4)
f :: String -> [String]
f (x:y:xs) = (y:x:xs) : map (x:) (f (y:xs))
f xs = []
请注意,f [x]
会返回[]
,但如果需要,则很容易修复。