Prolog 中的比较和数据过滤

以下事实以这种格式表示票房前十的电影

%% movie(title , star, genre, gross) movie(battle_los_angeles, aaron_eckhart, action, 13500000). movie(rango, johnny_depp, animation, 51100000). movie(red_riding_hood, amanda_seyfried, fantasy, 5300000). movie(the_adjustment_bureau, matt_damon, sci_fi, 30400000). movie(mars_needs_moms, seth_green, animation, 1700000). movie(beastly, alex_pettyfer, romance, 13600000). movie(hall_Pass, owen_wilson, comdey, 31300000). movie(just_go_with_it, adam_sandler, comedy, 91200000). movie(unknown, liam_neeson, thriller, 56000000). movie(the_king_speech, colin_Firth, history, 126400000). 
  • 定义一个规则,只返回所有电影的标题。
  • 定义一个规则,只返回所有电影的明星。
  • 定义一个规则,返回具有相同类型的电影的标题。
  • 定义一个规则,基于票房比较两个电影的标题。

我目前的解决方案是:

domainss=symbolpredicatesnondeterm movie(s,s,s,integer)nondeterm title(s)nondeterm star(s)clauses %% movie(title , star, genre, gross) movie(battle_los_angeles, aaron_eckhart, action,13500000). movie(rango, johnny_depp, animation, 51100000). movie(red_riding_hood, amanda_seyfried, fantasy,5300000). movie(the_adjustment_bureau, matt_damon, sci_fi,30400000). movie(mars_needs_moms, seth_green, animation,1700000). movie(beastly, alex_pettyfer, romance,13600000). movie(hall_Pass, owen_wilson, comdey,31300000). movie(just_go_with_it, adam_sandler, comedy, 91200000). movie(unknown, liam_neeson, thriller, 56000000). movie(the_king_speech, colin_Firth, history, 126400000). title(X):-movie(X,_,_,_).star(X):-movie(_,X,_,_).goalstar(X).

我尝试解决最后两个问题,但我不知道该怎么做…

  • 定义一个规则,返回具有相同类型的电影的标题。
  • 定义一个规则,基于票房比较两个电影的标题。

回答:

定义一个规则,只返回所有电影的标题

title(X):-movie(X,,,_).

实际上,该谓词返回电影的一个标题,但作为生成器会多次执行。返回所有这些元素或生成它们之间存在很大差异。

定义一个规则,基于票房比较两个电影的标题。

“比较规则”是什么意思?它应该初始化排序类型,如 (<) 或 (>) 或 (==) – compare_gross?或者它应该初始化元素的最大值 max_gross

最后,我的解决方案是:

%% movie(title , star, genre, gross)movie(battle_los_angeles, aaron_eckhart, action, 13500000). movie(rango, johnny_depp, animation, 51100000). movie(red_riding_hood, amanda_seyfried, fantasy, 5300000). movie(the_adjustment_bureau, matt_damon, sci_fi, 30400000). movie(mars_needs_moms, seth_green, animation, 1700000). movie(beastly, alex_pettyfer, romance, 13600000). movie(hall_Pass, owen_wilson, comedy, 31300000). movie(just_go_with_it, adam_sandler, comedy, 91200000). movie(unknown, liam_neeson, thriller, 56000000). movie(the_king_speech, colin_Firth, history, 126400000). % Define a rule that only returns all the titles of movies.titles( Titles ) :-     findall( X, movie( X, _, _, _), Titles ).% Define a rule that only returns all the stars of movies.stars( Stars ) :-     findall( X, movie( _, X, _, _), Stars ).get_by_genre( Genre, Titles ) :-    findall( X, movie( X, _, Genre, _ ), Titles ).% Define a rule that compares between two movie titles based on grosscompare_gross( Title1, Title2, Ans ) :-    movie( Title1, _, _, Gross1 ),    movie( Title2, _, _, Gross2 ),    compare( Ans, Gross1, Gross2 ).max_gross( Title1, Title2, TitleMax ) :-    movie( Title1, _, _, Gross1 ),    movie( Title2, _, _, Gross2 ),    (        ( Gross1 > Gross2        , TitleMax = Title1        )        ;           ( Gross1 =< Gross2        , TitleMax = Title2        )    ),    !.

这就是你得到的

?- titles(X).X = [battle_los_angeles, rango, red_riding_hood, the_adjustment_bureau, mars_needs_moms, beastly, hall_Pass, just_go_with_it, unknown|...].?- stars(X).X = [aaron_eckhart, johnny_depp, amanda_seyfried, matt_damon, seth_green, alex_pettyfer, owen_wilson, adam_sandler, liam_neeson|...].?- get_by_genre( animation, X ).X = [rango, mars_needs_moms].?- compare_gross( rango, hall_Pass, Ans ).Ans = (>).?- max_gross( rango, hall_Pass, Ans ).Ans = rango.

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注