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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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