1

我开始学习haskell,我需要你的帮助,这可能很简单,但我无法解决。

我有一个字符串:

ABCDEFG

我需要将此字符串转换为这种格式:

A-B
B-C
C-D
D-E
E-F
F-G

有人好心给我一些提示吗?谢谢你。

4

2 回答 2

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 
于 2013-06-10T18:40:24.953 回答
4

zip您可以使用和配对连续字符drop

let str = "ABCDEFG"
let pairs = zip str (drop 1 str)

然后您可以映射字符对列表以创建字符串:

map (\(f, s) -> f:'-':s:[]) pairs

它为您提供了一个字符串列表。

正如评论指出的那样,您可以使用and代替zip, :mapdrop 1zipWithtail

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")
于 2013-06-10T18:40:35.973 回答