想象一下,我有一个像
这样的元组列表 [("Fazaal","Naufer",07712345678)
,("Tharanga","Chandasekara",0779876543)
,("Ruaim","Mohomad",07798454545)
,("Yasitha","Lokunarangoda",07798121212)
,("Rochana","Wimalasena",0779878787)
,("Navin","Dhananshan",077987345678)
,("Akila","Silva",07798123123)
,("Sudantha","Gunawardana",0779812456)
]
我想在这里展示每个元组。 我尝试了这段代码,但它混淆了格式。
displayDB :: [Reservation] ->String
displayDB [] = []
displayDB (x :xs) = show x ++ show( displayDB (xs))
答案 0 :(得分:1)
考虑较小输入端会发生什么。每一行都是一个扩展:
displayDB [("A", "B", 1), ("C", "D", 2)]
=> show ("A", "B", 1) ++ show (displayDB [("C", "D", 2)])
=> show ("A", "B", 1) ++ show (show ("C", "D", 2) ++ show (displayDB []))
=> show ("A", "B", 1) ++ show (show ("C", "D", 2) ++ show [])
答案 1 :(得分:1)
首先,您在“displayDB”的字符串输出上调用“show”。你的最后一行应该是
displayDB (x :xs) = show x ++ displayDB xs
您的版本将导致每个连续的元组被包含在另一个字符串转义层中,因此您将逐步进行更复杂的转义。
其次,“show x”将以最明显和最基本的方式将元组转换为字符串。您可能希望比以更好的方式发出字段的功能更好,并且您还需要根据需要插入逗号或换行符。不知道你想要什么,这个输出有点难以分辨。
第三,写一个你自己的递归函数是不好的风格(除非你把它写成一个练习);更好的风格是组合像“地图”这样的功能。表达式
map show xs
会将元组列表转换为字符串列表。然后,您可以打印这些字符串或使用Data.List中的“intercalate”将此字符串列表转换为单个字符串,并在元素之间放入正确的位。所以你可能想要像
这样的东西displayDB xs = intercalate“,\ n”$ map show xs
或者如果您喜欢无点形式:
displayDB = intercalate“,\ n”。地图秀