如何将元素添加到haskell列表中的元组?

时间:2015-03-12 12:31:40

标签: list haskell tuples

我有以下类型和数据库: -

type Title = String
type Singer = [String]
type Year = Int
type Fan = String
type Fans = [Fan]

type Song = (Title, Signer, Year, Fans)

type Database = [Song]  

songDatabase :: Database
songDatabase = [("Wrapped up", ["Olly Murs"], 2014, ["Garry", "Dave", "Zoe", "Kevin", "Emma"]),
    ("Someone Like you", ["Adele"], 2011, ["Bill", "Jo", "Garry", "Kevin", "Olga", "Liz"]), 
("Drunk in Love", ["Beyonce", "Jay Z"], 2014, ["tom", "Lucy"])]

我想为列表中的最后一个元组添加一个粉丝。我是通过使用addToAl来做到这一点还是我可以使用其他方法?

我是否必须搜索数据并将其删除,然后添加我想要的数据?或者有没有办法将“John”添加到像你这样的人的粉丝中。

1 个答案:

答案 0 :(得分:4)

您无法将元组添加到现有列表中,Haskell中的所有值都是不可变的。相反,您可以构造一个包含所需值的新列表。实现这一目标的最佳方法是首先编写一个可以为单个电影添加风扇的功能:

addFan :: Fan -> Song -> Song
addFan fan (title, singer, year, fans) = ???

然后你可以编写一个函数来更新数据库中的特定歌曲:

addFanInDB :: Fan -> Title -> Database -> Database
addFanInDB fan songTitle [] = []
addFanInDB fan songTitle (song:db) = ???

因为这看起来非常像家庭作业,所以我不打算给你一个完整的解决方案,因为这会破坏作业的目的。您需要自己填写???