如何 return Prolog 中的年份差异?
How to return difference in years in Prolog?
假设我有一个包含事件的数据库:
events('Second war',1400,date(1984,1,1)).
events('First war',3000,date(1944,9,1)).
并且想做一个谓词来计算特定年份和事件之间的年份时间差,即 returns true
如果例如我们输入:
timelapse('First war', 2000, 56 ).
因为相差56年,而如果输入
timelapse('First war', 2000, X ).
它returns X=56
.
目前我有这个功能,但是它给出了警告并且没有正确执行:
timelapse(E, D, DF) :- events(E,date(X,_,_),_), DY is X,
DY > D -> DF = "invalid"; DF is D-DY.
如何写这个谓词?
这个呢?
timelapse(E, D, "invalid") :-
events(E,_,date(DY,_,_)),
DY > D,
!.
timelapse(E, D, DF) :-
events(E,_,date(DY,_,_)),
DF is D-DY.
请注意,您代码中的 events(E,date(X,_,_),_)
无法与 events('First war',3000,date(1944,9,1))
统一 - 顺序错误。
假设我有一个包含事件的数据库:
events('Second war',1400,date(1984,1,1)).
events('First war',3000,date(1944,9,1)).
并且想做一个谓词来计算特定年份和事件之间的年份时间差,即 returns true
如果例如我们输入:
timelapse('First war', 2000, 56 ).
因为相差56年,而如果输入
timelapse('First war', 2000, X ).
它returns X=56
.
目前我有这个功能,但是它给出了警告并且没有正确执行:
timelapse(E, D, DF) :- events(E,date(X,_,_),_), DY is X,
DY > D -> DF = "invalid"; DF is D-DY.
如何写这个谓词?
这个呢?
timelapse(E, D, "invalid") :-
events(E,_,date(DY,_,_)),
DY > D,
!.
timelapse(E, D, DF) :-
events(E,_,date(DY,_,_)),
DF is D-DY.
请注意,您代码中的 events(E,date(X,_,_),_)
无法与 events('First war',3000,date(1944,9,1))
统一 - 顺序错误。