首页 > 解决方案 > Prolog中两个函数的返回值相等

问题描述

我有一个电影数据库,其中包含以下术语

movie(blood_simple, 1984).
movie(the_cotton_club, 1984).
movie(american_beauty, 1999).
...

我想编写一个函数,如果两部给定的电影在同一年发行,则返回 true,否则返回 false。

我在比较两个值时遇到问题,我的函数总是返回 false。

这是我的代码:

sameyear(Movie1,Movie2):-
    movie(Movie1,Year1),
    movie(Movie2,Year2).
    % here I tried comparing Year1 with Year2 like: Year1 == Year2, Year1 =:= Year2, nothing worked.
  

另一个代码:

sameyear(Movie1,Movie2):-
    movie(Movie1,Year1),
    movie(Movie2,Year1).    % here I expected that it would return true if the movies were released at the
 same year, because Year1 has already got a value at *movie(Movie1,Year1)*, but that didn't happen

你能帮助我吗?

标签: prologcomparison

解决方案


您在子句.末尾写了一个点 ( )。movie(Movie2, Year2)因此,这意味着您结束了谓词。如果你然后写Year1 == Year2.,那么这是另一个规则。

因此,您应该使用逗号,它在语义上接近逻辑 and

sameyear(Movie1,Movie2):-
    movie(Movie1,Year1),
    movie(Movie2,Year2),  % ← added a comma
    Year1 == Year2.

这会产生:

?- sameyear(M1, M2).
M1 = M2, M2 = blood_simple ;
M1 = blood_simple,
M2 = the_cotton_club ;
M1 = the_cotton_club,
M2 = blood_simple ;
M1 = M2, M2 = the_cotton_club ;
M1 = M2, M2 = american_beauty.

推荐阅读