[英]Converting a string of characters into a list with a set layout in Haskell
我有以下函数可以放大,它需要一个字符串,例如“ 5a”,并在列表中输出, 即[('a',5)]
。 我如何更改它以使其允许多于一对的输入,所以如果输入类似“ 5a5b”的内容,则输出将为[('a',5),('b',5)]
吗?
我为此的当前代码在这里:
enlarge :: String -> [(Char,Int)]
enlarge [] = []
enlarge xs = [(a,b) | (b,a:_) <- reads xs]
上面的代码有效,并且仅适用于一对, 即,如果输入“ 5a”,则将输出[('a',5)]
。 但是,我想对其进行更改,以便允许仅一对输入,即,如果输入“ 5a3b”,则输出应为[('a',5),('b',3)]
。 当前,它仅考虑字符串的前两个部分。
我的尝试是在这里:
enlarge xs = [((a,b),ts) | ((b,a),ts) <- reads xs, reads ts]
我在这里尝试做的是,首先获取前两个字符对,然后读取更多字符,然后对这些字符做同样的事情。
我为您的请求编写了一个递归代码。
enlarge :: String -> [(Char,Int)]
enlarge [] = []
enlarge (x:y:ls) = [(y,digitToInt x)] ++ enlarge ls
在此,代码假定输入长度为偶数。 并使用digitToInt
将Char转换为Int。
我们需要更多的输入输出示例。 例如, "12z"
应如何处理? 另外,还不清楚reads
是什么意思。 但是我想你想要这个
[(c, read i :: Int) | [i, c] <- chunksOf 2 xs]
不要忘记导入chunksOf
,可以在Data.List.Split中找到它 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.