如何在保存结果的同时搜索元组并增加

use*_*712 1 haskell

import Data.Char
import Data.List
import Data.Maybe

-- Sample test data
type Movies = (String, String)

sample :: [Movies]
sample = [("I am legend","Will Smith"),
        ("Rise of the Planet of the Apes","James Franco"),
        ("Godzilla","Bryan Cranston")]

sellTicket :: [Movies] -> String -> String -> [Movies]
sellTicket [] _ _ = []
sellTicket ((title, actor): xs) aTitle anActor
    | title == aTitle && actor == anActor = 
        (title, actor):sellTicket xs aTitle anActor
    | otherwise = (title,actor):sellTicket xs aTitle anActor
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助,现在一切正常.

而詹姆斯弗兰科则崛起了猿星球.

Thr*_*eFx 5

试试这个:

sellTicket :: [Movies] -> String -> String -> [Movies]
sellTicket l title actor = sellTicketHelp l title actor False
  where      
    sellTicketHelp [] _ _ True = []
    sellTicketHelp [] title actor False = [(title, actor, 1)]
    sellTicketHelp ((t, a, q):xs) title actor b
        | title == t && actor == a = (t, a, q+1) : sellTicketHelp xs title actor True
        | otherwise = (t, a, q) : sellTicketHelp xs title actor b
Run Code Online (Sandbox Code Playgroud)

sellTicket现在有一个辅助功能,除了其他参数外,还有一个布尔值,用于确定是否已找到匹配项.如果遍历了列表并且找到了匹配项,那么它确实返回空列表,其余的将被强制转换.否则,如果它还没有找到匹配,它将返回一个包含数量为1的新电影的列表,其中所有内容都将被回收.