如何将一个符号置换回来。我有一个给定的字符串:abcdpqrs
,其中输出为:badcqpsr
。
我目前的代码:
f s = foldr (\a ~(x,y) -> (a:y,x)) ([],[]) s
main :: IO ()
main = do
str <- getLine
print(f str)
评估f "abcdpqrs"
结果
("acpr",
"bdqs")
如何使用"badcqpsr"
?
更新的代码:
rev (a : b : xs) = b : a : rev xs
rev xs = xs
main = do
n <- getLine
l <- getContents
putStr (rev l)
当输入为2个字符串时,abcdpqrs
和az
结果为badcqpsra
和z
。预期输出为badcqpsr
和za
。我怎么解决它?
答案 0 :(得分:0)
这是一个提示:
reverseFirst2 :: [a] -> [a]
reverseFirst2 (x1:x2:xs) = x2:x1:xs
reverseFirst2 xs = xs
这会颠倒列表前两个元素的顺序
> reverseFirst2 "abcdpqrs"
"bacdpqrs"
你能否填写下面的...
来对列表的其余部分做同样的事情?
reverseEvery2 :: [a] -> [a]
reverseEvery2 (x1:x2:xs) = x2:x1: ...
reverseEvery2 xs = xs
要一次输入一行,请一次读取一行输入。
main = do
l <- getLine
print (reverseEvery2 l)
main
您使用getContents
获得该行为的原因是从getContents
读取的输入包括行尾的换行符。它基本上正在运行
rev "abcdpqrs\naz\n" =
"badcqpsra\n\nz"