我开始学习haskell了,我需要你帮助的东西可能很简单,但我无法解决。
我有一个字符串:
ABCDEFG
我需要将此字符串转换为以下格式:
A-B
B-C
C-D
D-E
E-F
F-G
有人可以给我一些提示吗? 谢谢。
答案 0 :(得分:6)
只需使用zip
中的Data.List
,就像这样:
let str = "ABCDEFG"
in zip str $ tail str
返回对[(Char, Char)]
对的列表。
然后输出类似问题的内容,你可以这样做:
main :: IO ()
main = do
let str = "ABCDEFGH"
couples = zip str $ tail str
mapM_ (\(x,y) -> putStrLn $ x : '-' : y : "") couples
答案 1 :(得分:4)
您可以使用zip
和drop
配对连续的字符:
let str = "ABCDEFG"
let pairs = zip str (drop 1 str)
然后您可以映射字符对列表以创建字符串:
map (\(f, s) -> f:'-':s:[]) pairs
给出了一个字符串列表。
正如评论所指出的那样,您可以使用zip
和map
代替drop 1
,zipWith
和tail
:
zipWith (\f s -> f:'-':s:[]) str (tail str)
您可以在一行中执行此操作:
let stringList = map (\(f, s) -> f:'-':s:[]) $ zip str (drop 1 str)
如果您需要单个输出字符串,可以使用unlines
例如
let str = unlines stringList
作为单一功能:
formatPairs :: String -> String
formatPairs str = unlines $ map (\(f, s) -> f:'-':s:[]) $ zip str (drop 1 str)
或
formatPairs :: String -> String
formatPairs str = unlines $ zipWith (\f s -> f:'-':s:[]) str (tail str)
如果您需要打印,可以使用putStr
:
putStr (formatPairs "ABCDEFG")