2014-02-25 43 views
0

你好,我想過濾一個元組,並傳遞給另一個函數兩個參數,一個StringInt(不是數組)過濾一個元組,並傳遞給另一個函數2個參數

我有以下功能:

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然後通過IntdisplayRatedFilms,如果其False進行過濾。

任何想法如何實現?

+0

你能否提供'listRatedFilms'的確切類型? –

+0

我更新了問題! – Bobys

回答

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

可以使用Data.List模塊中的filter方法過濾掉所有有False元組的第一個位置,像這樣的項目:

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

有沒有多少人,我可以在這一點建議不過,因爲你的方法都沒有返回任何類型的列表。

相關問題