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

How to add an element to a tuple in a list in haskell?

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

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" 添加到 someone like you 元组中的粉丝。

您不能将元组添加到现有列表中,Haskell 中的所有值都是不可变的。相反,您可以构造一个包含所需值的新列表。最好的实现方式是先写一个可以给单片加粉丝的函数:

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

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

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

由于这看起来很像家庭作业,因此我不会为您提供完整的解决方案,因为这违背了作业的目的。您需要自己填写 ???