You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已实现的Haskell评分函数将网站评分纳入影片列表?

把网站评分加入影片列表的实现方案

看起来你已经搞定了核心的评分计算逻辑,现在要把网站评分和影片信息绑定到列表里对吧?我来给你两种实用的实现思路:

1. 生成「影片+评分」的元组列表

这种方式不需要修改现有Film类型,直接用元组把影片和对应的评分打包在一起,简单直接:

-- 给所有影片添加对应的网站评分
filmsWithRating :: [Film] -> [(Film, Int)]
filmsWithRating films = [(film, websiteRating film) | film <- films]

-- 只给评分≥75的高评分影片添加评分(结合你已有的rating函数)
highRatedFilmsWithRating :: [Film] -> [(Film, Int)]
highRatedFilmsWithRating films = [(film, websiteRating film) | film <- rating films]

示例用法

假设你的Film类型是类似这样的定义(如果和你的实际定义不同,调整即可):

type Film = (String, String, Int, [String], [String]) -- 标题、导演、年份、点赞用户、踩用户

-- 测试影片数据
testFilms :: [Film]
testFilms = [
    ("Inception", "Christopher Nolan", 2010, ["Alice", "Bob", "Cindy"], []), -- 3赞0踩,评分100
    ("Midnight in Paris", "Woody Allen", 2011, ["Dave", "Eve"], ["Frank"]), -- 2赞1踩,评分67
    ("Bad Film", "Unknown Director", 2023, ["Gary"], ["Helen", "Ivy", "Jack"]) -- 1赞3踩,评分25
    ]

调用filmsWithRating testFilms会得到:

[(("Inception","Christopher Nolan",2010,["Alice","Bob","Cindy"],[]),100), (("Midnight in Paris","Woody Allen",2011,["Dave","Eve"],["Frank"]),67), (("Bad Film","Unknown Director",2023,["Gary"],["Helen","Ivy","Jack"]),25)]

调用highRatedFilmsWithRating testFilms则只会返回评分≥75的条目:

[(("Inception","Christopher Nolan",2010,["Alice","Bob","Cindy"],[]),100)]

2. 定义新类型包含评分(更结构化的方式)

如果希望影片信息和评分的绑定更清晰,可以定义一个新的FilmWithRating类型,把评分作为影片数据的一部分:

data FilmWithRating = FilmWithRating 
    { film :: Film
    , siteRating :: Int
    } deriving (Show) -- 派生Show方便打印输出

-- 生成带评分的影片列表
filmsWithRating' :: [Film] -> [FilmWithRating]
filmsWithRating' films = [FilmWithRating film (websiteRating film) | film <- films]

-- 筛选高评分的带评分影片列表
highRatedFilmsWithRating' :: [Film] -> [FilmWithRating]
highRatedFilmsWithRating' films = [FilmWithRating film (websiteRating film) | film <- rating films]

示例用法

调用highRatedFilmsWithRating' testFilms会得到:

[FilmWithRating {film = ("Inception","Christopher Nolan",2010,["Alice","Bob","Cindy"],[]), siteRating = 100}]

这种方式的好处是,后续访问评分时可以用siteRating字段名,代码可读性更高。

另外,你的现有函数逻辑没问题,userRate里处理点赞+踩数量为0的情况很合理,避免了除以0的错误~

内容的提问来源于stack exchange,提问作者sam786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:01