2012-07-07 85 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

相關問題