haskell中的多个递归函数

时间:2014-02-24 18:04:04

标签: haskell recursion

我需要通过函数中的两个列表进行递归,但是我看不到这样做的方法。

siteRating6OrHigher :: [Film] -> [String]
siteRating6OrHigher [] = []
siteRating6OrHigher ((Film title _ _ ((_, rating):ratings)):restOfFilms)
    | rating >= 6 = [title] ++ siteRating6OrHigher restOfFilms
    | otherwise = siteRating6OrHigher restOfFilms

我的数据格式为:testDatabase = [Film "Blade Runner" "Ridley Scott" 1982 [("Amy",6), ("Bill",9), ("Ian",7), ("Kevin",9), ("Emma",4), ("Sam",5), ("Megan",4)],

所以目前我正在通过'restOfFilms'进行递归,但我还需要通过电影类型中的评级列表进行递归。有没有办法做到这一点,所以它通过每部电影的每组评级来递减?

由于

数据结构:

data Film = Film String String Int [(String, Int)]
        deriving (Eq,Ord,Show,Read)

1 个答案:

答案 0 :(得分:3)

我会对列表进行fmap,转换任何评分> 6进入布尔值True,然后使用foldr通过列表(||)和默认值False,这应该将列表减少为单个True如果任何高于6则为False,否则为False。

foldr (||) False (fmap ((> 6) . snd) ratings)

编辑:根据Rhymoid的建议更简单

编辑2 :整个解决方案。

siteRating6OrHigher :: [Film] -> [String]
siteRating6OrHigher [] = []
siteRating6OrHigher ((Film title _ _ ratings):restOfFilms)
    | above60 ratings = [title] ++ siteRating6OrHigher restOfFilms
    | otherwise = siteRating6OrHigher restOfFilms
  where above60 = any ((> 6) . snd)