过滤元组并传递给另一个函数2参数

时间:2014-02-25 21:24:30

标签: haskell tuples

您好我想过滤一个元组并传递给另一个函数2参数,StringInt(不在元组中)

我有这些功能:

hasRated :: [Rating] -> String -> (Bool, Int)
hasRated [] username = (False, 0)
hasRated ((name, rate):xs) username
            | name == username && rate > 0 = (True, rate)
            | otherwise = hasRated xs username

listRatedFilms :: String -> Film -> (Bool, Int)
listRatedFilms username (t, d, y, r) = hasRated r username

displayFilmsRatings :: String -> Database -> String
displayFilmsRatings username database = displayRatedFilms (filter (listRatedFilms username) database)

displayRatedFilms :: Database -> Int -> String
displayRatedFilms database mark = concat(map displayRatedFilm database)

listRatedFilms会返回元组(Bool, Int),即(True, 4)

现在,如果BoolTrue,我希望对其进行过滤,然后将Int传递给displayRatedFilms,如果其False进行过滤。< / p>

有任何想法如何实现这个?

2 个答案:

答案 0 :(得分:2)

显示某些内容,假设:getFilms :: Database -> [Film]或其他Database

displaySome :: String -> Database -> String
displaySome username database = unwords
                            . map (displayRatedFilms database . snd)
                            . filter fst
                            . map (listRatedFilms username)
                            . getFilms $ database

答案 1 :(得分:1)

您可以使用Data.List模块的filter方法过滤掉元组第一个位置False的所有项目,如下所示:

haveRatings = filter (\(p, v) -> p) films

此时我没有其他建议,因为你的方法都没有返回任何类型的列表。