我开始学习haskell,我需要你的帮助,这可能很简单,但我无法解决。
我有一个字符串:
ABCDEFG
我需要将此字符串转换为这种格式:
A-B
B-C
C-D
D-E
E-F
F-G
有人好心给我一些提示吗?谢谢你。
我开始学习haskell,我需要你的帮助,这可能很简单,但我无法解决。
我有一个字符串:
ABCDEFG
我需要将此字符串转换为这种格式:
A-B
B-C
C-D
D-E
E-F
F-G
有人好心给我一些提示吗?谢谢你。
像这样简单地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
zip
您可以使用和配对连续字符drop
:
let str = "ABCDEFG"
let pairs = zip str (drop 1 str)
然后您可以映射字符对列表以创建字符串:
map (\(f, s) -> f:'-':s:[]) pairs
它为您提供了一个字符串列表。
正如评论指出的那样,您可以使用and代替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")