Elz*_*ger -1 string haskell list char
我想从字符列表中创建一个字符串[Lettre]
例如,['1','2','3','W','5','5','W','3']应打印为(1、2、3,W,5 ,5,W,3)
现在,我用
data Lettre = Steen Char
makeString :: [Lettre] -> String
makeString [] = ""
makeString [Steen(x)] = x:[]
makeString (Steen(x):xs) = (x:", ") ++ makeString xs
Run Code Online (Sandbox Code Playgroud)
但我觉得这样可能会更容易。
是否有一个简单的函数,例如toString?我尝试使用一些我知道的函数,但是它似乎不适用于我的代码,因此我继续使用makeString。
非常感谢任何可以帮助我的人:)
给定一个字符列表,您可以使用intersperse,但是仅允许使用单字符分隔符。
> "(" ++ intersperse ',' "123W55W3" ++ ")"
"(1,2,3,W,5,5,W,3)"
Run Code Online (Sandbox Code Playgroud)
对于像这样的多字符分隔符", ",可以使用intercalate,但是然后需要一个列表String,而不是一个列表Char。
解决方案是将每个字符提升为字符串,然后使用intercalate。
> "(" ++ intercalate ", " (map pure "123W55W3") ++ ")"
"(1, 2, 3, W, 5, 5, W, 3)"
Run Code Online (Sandbox Code Playgroud)
我假设输入是一个实际的[Char]/ String值;如果您实际上有一些更复杂的Char包装器,例如
newtype Lettre = Steen Char
Run Code Online (Sandbox Code Playgroud)
从您的尝试可以推断出,请改用类似
makeString :: [Lettre] -> String
makeString xs = "(" ++ intercalate ", " [[x] | Steen x <- xs] ++ ")"
Run Code Online (Sandbox Code Playgroud)