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.
我需要编写一个谓词,如果 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.