Prolog,X 比 Y 老

Prolog, X is older than Y

我需要编写一个谓词,如果 X 早于 Y,则该谓词为真。我的代码如下。我还没有看到任何错误。请帮助我。

born(jan, date(20, 3, 1977)).

born(joris, date(17, 3, 1995)).

born(jesus, date(24, 12, 0)).

born(joop, date(30, 4, 1989)).

before(date(_, _, Year1), date(_, _, Year2)) :-
      Year1 < Year2.

before(date(_, Month1, Year ), date(_, Month2, Year)) :-
      Month1 < Month2.

before(date(Day1, Month, Year ), date(Day2, Month, Year)) :-
      Day1 > Day2.

older(X, Y) :-
      X \= Y,
      born(X, B1),
      born(Y, B2),
      before(B1, B2). 

查询应该给出这个。

?- older(jesus, Y).
jan,
joris,
joop.

X and/or Y 可能未实例化时,将发出 older/2 中的比较 X\= Y,这将失败。你必须在你知道它们用正确的值实例化之后发出那个比较,即在为每个它们调用 born/2 之后:

older(X, Y) :-
      born(X, B1),
      born(Y, B2),
      X \= Y,
      before(B1, B2). 

另外,如评论中所述,before/2的第三条应该是:

before(date(Day1, Month, Year ), date(Day2, Month, Year)) :-
      Day1 < Day2.

样本运行:

?- older(jesus, Y).
Y = jan ;
Y = joris ;
Y = joop ;
false.