2012-07-07 64 views
2

嗨,你能帮助我如何增加一个元组的最后一个元素。 目前,我有元组Haskell增加一个元组的最后一个元素

items :: [Grocery] 
items = [("Water", "Drink Section", 1), 
     ("Squash", "Drink Section", 1), 
     ("Apple", "Fruit Section", 1), 
     ("Plates", "Disposable Section", 1), 
     ("Plates", "Ceramic Section", 1)] 

和我想做的事是每1项是买的时间和输出数据库增加它的这个名单。目前我有这个

sales:: [database] -> String -> String-> [database] 
sales db itemName sectionName = [] 
sales ((item, section, qty): xs) itemName sectionName 
    | item == itemName && section== sectionName = [(item, section, qty + 1)] 
    | otherwise = [] 

即时通讯仍然在增加它和im卡位。请帮助我,我仍然是这个语言的新手。谢谢!

编辑

所有现在的工作,但你怎么输出列表的休息吗?我试过recordSale xs trackArtist trackTitle,但是当我测试它时,我增加的旧记录也被打印,而不是被修改?让说,我递增苹果是什么,它会打印是这

[("Apple", "Fruit Section", 2),("Water", "Drink Section", 1),("Squash", "Drink Section", 1), ("Apple", "Fruit Section", 1)] 

它重复记录,而不是仅仅增加1

+0

如果这是作业,请用[tag:homework]标签标记它。 *提示:*使用'map'或列表理解 – fuz 2012-07-07 18:51:00

回答

5

这不是坏事,但让假装你想增加“南瓜”,第二个元素放在您的示例项目列表中。 sales是做什么的?它检查列表中的第一个项目Water是否等于Squash。由于水不等于压扁,所以遇到otherwise的情况并返回[]

因此,所有这一切似乎直到我们得到了一个[]回来 - 让我们改变其他代码。显然,我们不想扔掉整个列表,这将是愚蠢的。您应该重写它以保留刚刚比较的项目并将其连接到应用于列表的其余部分(xs)的sales的结果。

当你得到那otherwise分支固定后,你会注意到你增加的项目被扔掉后的整个列表 - 我认为一旦你完成这个问题,你会立即弹出。

P.S.向将饮料放在饮水部分的员工开火。

+1

谢谢先生!修改否则brach为'|否则=销售xs itemName sectionName',它的工作!谢谢! – 2012-07-07 19:05:36

相关问题