首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在prolog中对列表进行排序

如何在prolog中对列表进行排序
EN

Stack Overflow用户
提问于 2021-11-28 16:22:23
回答 1查看 53关注 0票数 0

我想用prolog对电影列表进行排序。我有以下电影列表,其中第一个数字是电影的长度,第二个数字是年龄分级,第三个是电影1-10的分级:

代码语言:javascript
复制
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).
]).

我希望有一个像sortMoviesByRank( list,Sort)这样的谓词,这样我就可以得到一个从前到后具有最高排名的电影列表。

EN

回答 1

Stack Overflow用户

发布于 2021-11-28 17:29:42

首先,您必须使用逗号分隔列表中的元素。

代码语言:javascript
复制
db([movie("District 9",
          [actor("Copley","Sharlto"), actor("James","David")],
          [genre("Science-Fiction")], 
          112, 13, 10) ,                               % <== use comma!
    movie("The Matrix",[actor("Reeves","Keanu")],
          [genre("Science-Fiction"),genre("Action")],
          136,13,10) ,                                 % <== use comma!
    ...]).

其次,不清楚movie/6术语中的哪个参数表示电影的排名。因此,为简单起见,请考虑以下数据库,其中元素的格式为movie(Title, Rank)

代码语言:javascript
复制
simpler_db([
    movie("District 9", 5),
    movie("The Matrix", 1),
    movie("Shutter Island", 9),
    movie("Gladiator", 7),
    movie("The Fault In Our Stars", 8)]).

要获得从前到后排名最高的电影列表,可以使用谓词sort/4

代码语言:javascript
复制
?- simpler_db(DB), sort(2, @>=, DB, List).

DB = [movie("District 9", 5), movie("The Matrix", 1), 
      movie("Shutter Island", 9), 
      movie("Gladiator", 7), 
      movie("The Fault In Our Stars", 8)],

List = [movie("Shutter Island", 9), 
        movie("The Fault In Our Stars", 8), 
        movie("Gladiator", 7), 
        movie("District 9", 5), 
        movie("The Matrix", 1)].

目标sort(2, @>=, DB, List)按照参数2 (即Rank)的降序(@>=)对列表DB的元素进行排序,保留副本,生成List作为结果。

编辑要对术语列表进行排序,您需要一个sort(+Key, +Order, +List, -Sorted)形式的目标,其中Key是必须用作排序关键字的术语参数的编号。因此,如果电影由movie(Title, Actors, Genre, Length, Age, Rating)形式的术语表示,并且您希望按参数Rating (这是表示电影的术语的第6个参数)进行排序,那么您可以问:

代码语言:javascript
复制
?- db(DB), sort(6, @>=, DB, List).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70145323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档