如何在Haskell中将值列表显示为逗号分隔的字符串列表

如何在Haskell中将值列表显示为逗号分隔的字符串列表,haskell,Haskell,写入文件后,我需要从最后一个列表中删除逗号。如何从列表中删除逗号 Expected output [Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)], Spa"25""Zen"

写入文件后,我需要从最后一个列表中删除逗号。如何从列表中删除逗号

Expected output

[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],

Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]]

正如评论中所建议的,一种可能的方法是:

  • [Spa]
    转换为
    [String]
    ,而不添加任何逗号或换行符。这将生成一个类似于
    [“aaa”、“bbb”、“ccc”]
  • 在该列表中使用“StPys>、\n”/Cuff>在相邻元素的中间添加分隔符。这不会将分隔符添加到末尾。您将获得类似于
    [“aaa”、“,\n”、“bbb”、“,\n”、“ccc”]
  • 对结果使用
    concat
    ,获得
    “aaa\nbbb\nccc”
  • 添加最后的
    [
    ]
下面是一个运行并生成所需输出的示例:

import Data.List (intersperse)

data Spa = Spa String String String Int [(String, Int)]

-- turn original spa into String
spaStr :: Spa -> String
spaStr spa@(Spa rid br ar st s)
    = "Spa" ++ "\""++ rid ++ "\"" ++ "\"" ++ br ++ "\""++ "\""++ ar ++ "\"" ++ show st  ++ show s

newDb :: [Spa]
newDb =
   [ Spa "24" "Meta" "Outram" 1
     [("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)]
   , Spa "25" "Zen" "Outram" 2
     [("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]
   ]

main :: IO ()
main =
    putStrLn $ "[" ++ concat (intersperse ",\n" $ map spaStr newDb) ++ "]"
输出:

[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],
Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]]

这不可能吗?我觉得很难理解你在这里要求什么。确切地说,你在谈论哪个列表,你想从中删除一个项目还是一个逗号?(标题上说你想删除一个项目,但你的问题是要删除一个逗号。)你的
spaStr
在每个项目的末尾添加一个逗号,在项目列表的末尾看起来很奇怪。这是你的问题吗?(你的标题完全是另一回事)如果是这样,请看一下
Data.List
中的
intersperse
函数,如
concat$intersperse“,“[“a”、“b”、“c”]
是,因为我试图重写一个文本文件,使其除最后一个条目外都有逗号。因此,我不确定如何防止在末尾添加逗号,因为这将是一个很长的列表,因此我需要找到一种方法从最后一个条目中删除逗号,以便testdatabase可读。我所指的列表在testDatabase中。这个名称现在更有意义了吗?
import Data.List (intersperse)

data Spa = Spa String String String Int [(String, Int)]

-- turn original spa into String
spaStr :: Spa -> String
spaStr spa@(Spa rid br ar st s)
    = "Spa" ++ "\""++ rid ++ "\"" ++ "\"" ++ br ++ "\""++ "\""++ ar ++ "\"" ++ show st  ++ show s

newDb :: [Spa]
newDb =
   [ Spa "24" "Meta" "Outram" 1
     [("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)]
   , Spa "25" "Zen" "Outram" 2
     [("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]
   ]

main :: IO ()
main =
    putStrLn $ "[" ++ concat (intersperse ",\n" $ map spaStr newDb) ++ "]"
[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],
Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]]