如何解决如何在列表中显示所有元组数据使用递归
|| 想象一下,我有一个元组列表 [(\"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))
解决方法
首先,您在\“ displayDB \”的字符串输出上调用\“ show \”。您的最后一行应该是
displayDB (x :xs) = show x ++ displayDB xs
您的版本将导致每个连续的元组被封装在另一层字符串转义中,因此您将逐渐变得更加复杂。
其次,“ show x \”将以最明显和最基本的方式将元组转换为字符串。您可能想要比以更好的方式发出字段的函数更好的函数,并且您还希望适当地插入逗号或换行符。不知道您想要什么,这个输出很难说。
第三,编写自己的递归函数是不好的风格(除非您将其写为练习);更好的样式是编写\“ map \”之类的函数。表达方式
map show xs
会将您的元组列表转换为字符串列表。然后,您可以打印这些字符串或在Data.List中使用\“ intercalate \”将字符串列表转换为单个字符串,并在元素之间插入正确的位。所以你可能想要像
displayDB xs =插入\“,\\ n \” $ map show xs
或者,如果您更喜欢无点形式:
displayDB =插入\“,\\ n \”。地图展示
, 考虑一下较小的输入会发生什么。每行都是一个扩展:
displayDB [(\"A\",\"B\",1),(\"C\",\"D\",2)]
=> show (\"A\",1) ++ show (displayDB [(\"C\",2)])
=> show (\"A\",1) ++ show (show (\"C\",2) ++ show (displayDB []))
=> show (\"A\",2) ++ show [])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。