Parsing Haskell中if语句的分析错误
这是一个学术作业,我根本无法解决它 我有一个“曲目”(音乐唱片)的列表(数据库)-元组(标题、艺术家、销售编号),我的任务是增加一个给定曲目的销售,如果它已经存在于数据库中(相同的标题和艺术家),只需增加1个销售编号,或者如果它还不存在,将其添加到数据库中。我已经编写了(我想是正确的)函数来执行这两个任务中的任何一个,但是我正在努力编写一个函数来决定是添加一个新记录还是简单地增加它,并调用其中的任何一个Parsing Haskell中if语句的分析错误,parsing,haskell,if-statement,Parsing,Haskell,If Statement,这是一个学术作业,我根本无法解决它 我有一个“曲目”(音乐唱片)的列表(数据库)-元组(标题、艺术家、销售编号),我的任务是增加一个给定曲目的销售,如果它已经存在于数据库中(相同的标题和艺术家),只需增加1个销售编号,或者如果它还不存在,将其添加到数据库中。我已经编写了(我想是正确的)函数来执行这两个任务中的任何一个,但是我正在努力编写一个函数来决定是添加一个新记录还是简单地增加它,并调用其中的任何一个 addNewTrack :: [Sale] -> Title -> Artist
addNewTrack :: [Sale] -> Title -> Artist -> [Sale]
addNewTrack testDatabase title artist = testDatabase
incrExistingTrack :: [Sale] -> Title -> Artist -> [Sale]
incrExistingTrack testDatabase testedTitle testedArtist = []
incrExistingTrack ((title, artist, salesNumber): xs) testedTitle testedArtist
| testedTitle == title && testedArtist == artist =
[(title, artist, salesNumber + 1)]
| otherwise = incrExistingTrack xs title artist
recordSale :: [Sale] -> Title -> Artist -> [Sale]
recordSale testDatabase title artist
let trackExists = sameTrack title artist
if trackExists == True
then incrExistingTrack title artist
else addNewTrack title artist
sameTrack :: Title -> Artist -> Sale -> Bool
sameTrack queriedTitle queriedArtist (title, artist, salesNumber)
| (queriedTitle == title) && (queriedArtist == artist) = True
| otherwise = False
我的recordSale函数中的if语句在函数第四行的第一个字符上给出“parse error(可能是不正确的缩进或不匹配的括号)”,这有什么错
recordSale :: [Sale] -> Title -> Artist -> [Sale]
recordSale testDatabase title artist
let trackExists = sameTrack title artist
if trackExists == True
then incrExistingTrack title artist
else addNewTrack title artist
我一直在改变事情,改变缩进,但都没有用。我相信这一定是一个非常简单的错误。我如何识别问题?是否有一个替代方案,可能更优雅的实现我正在尝试做的事情
recordSale :: [Sale] -> Title -> Artist -> [Sale]
recordSale testDatabase title artist
= let trackExists = sameTrack title artist
in if trackExists == True
then incrExistingTrack testDatabase title artist
else addNewTrack testDatabase title artist
您输入的
sameTrack
参数太少。它应该是sameTrack testDatabase title artist
还要注意,
trackExists==True
是冗长的。它可以是trackExists
您的让语法看起来不正确。你需要一个在那里,不是吗?你好,为快速回复干杯,我不知道这个!那有什么用?再次感谢您,实现了一系列in-then-else语句(请参阅最新代码段),必须几乎按无解析错误排序,但get“无法将预期类型Sale->Bool与实际类型“Bool”匹配”,错误出现在“True”处“。从这里修复是否简单?我太累了,不能再做别的事情了addNewTrack
除了返回其第一个参数外,不执行任何操作IncremistingTrack
除了返回一个空列表外,什么都不做,因为第一个定义完全由无可辩驳的模式组成,所以它总是匹配任何参数。