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

如何在Prolog中对列表排序:按评分降序排列电影列表

Prolog 电影列表按评分降序排序实现

实现思路

  • 自定义比较谓词,提取两个电影结构的第6位评分字段,交换比较顺序实现降序规则
  • 调用Prolog内置的predsort/3谓词,传入自定义比较规则完成列表排序

完整代码

% 电影数据集(已修正原列表内元素分隔的语法错误)
db([
movie("District 9",[actor("Copley","Sharlto"),actor("James","David")],
[genre("Science-Fiction")],112,13,10),
movie("The Matrix",[actor("Reeves","Keanu")],[genre("Science-Fiction"),genre("Action")],136,13,10),
movie("Shutter Island",[actor("Dicaprio","Leonardo")],[genre("Drama")],136,16,8),
movie("Gladiator",[actor("Crowe","Russel")],[genre("Drama")],90,16,10),
movie("The Fault In Our Stars",[actor("Woodley","Shalaine")],[genre("Drama")],126,13,8)
]).

% 自定义评分降序比较规则
compare_movie_rank(Order, movie(_,_,_,_,_,Rank1), movie(_,_,_,_,_,Rank2)) :-
    % 交换两个评分的比较顺序实现降序
    compare(Order, Rank2, Rank1).

% 需求要求的排序谓词
% List:输入待排序的电影列表,Sorted:输出按评分降序排列的结果
sortMoviesByRank(List, Sorted) :-
    predsort(compare_movie_rank, List, Sorted).

使用示例

% 从数据库取出所有电影并排序
?- db(Movies), sortMoviesByRank(Movies, SortedList).

补充说明

返回结果中评分相同的电影相对顺序由Prolog内置排序逻辑决定,如果你需要在评分相同时按其他字段(比如时长、名称)做二次排序,只需要修改compare_movie_rank的比较逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:04