您好我想过滤一个元组并传递给另一个函数2参数,String
和Int
(不在元组中)
我有这些功能:
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)
现在,如果Bool
为True
,我希望对其进行过滤,然后将Int
传递给displayRatedFilms
,如果其False
进行过滤。< / p>
有任何想法如何实现这个?
答案 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
此时我没有其他建议,因为你的方法都没有返回任何类型的列表。