Prolog 序言:两个对象之间的差异关系
我会诚实地说这是家庭作业,但我迫切需要帮助 我是一个新的Prolog,来自C++和JavaScript,不管我怎么努力,我都没有得到。 我应该做的是能够找到两个日期之间的差异(假设非闰年) 基本上,我有一个知识库,包含如下信息:Prolog 序言:两个对象之间的差异关系,prolog,Prolog,我会诚实地说这是家庭作业,但我迫切需要帮助 我是一个新的Prolog,来自C++和JavaScript,不管我怎么努力,我都没有得到。 我应该做的是能够找到两个日期之间的差异(假设非闰年) 基本上,我有一个知识库,包含如下信息: object(A, B). object(A, B). ... 其中A表示月份,B表示月份的总天数。 (例如对象(1,31)。) 我应该用于输入的表达式是: 差异(对象(A,B),对象(A,B),N)。 (N=对象之间的差异) 我尝试了一些不同的方
object(A, B).
object(A, B).
...
其中A表示月份,B表示月份的总天数。
(例如对象(1,31)。)
我应该用于输入的表达式是:
差异(对象(A,B),对象(A,B),N)。
(N=对象之间的差异)
我尝试了一些不同的方法(我知道这不在正确的轨道上),但没有取得进一步的进展:
difference(object(A,B), object(A,B),N):-
days(M,D), days(M,D),
Y = 365-D,
N is Y.
我不明白如何将这两个对象注册为我可以操作的单独对象,从而继续这个问题
谁能给我指一下正确的方向吗
谢谢
作业问题(按要求)。
假设存在days关系,该关系描述了当前的天数
非闰年的每个日历月
days(1,31).
days(2,28).
(等等)
结构dateObject(M,D)描述一个日期。例如,dateObject(6,5)表示6月5日。
写出关系差(From,To,N),其中N是开始之间的天数
日期从和完成日期到。起始日期不包括在计数中。对于
例如:
如果日期中的日期或月份值无效(例如dateobject(4,31)、dateobject(13,1),则
返回的N值应为-1。如果开始日期晚于结束日期,则还应为N返回-1错误值。这是一个非常糟糕的解决方案-我相信比我聪明的人会想出更好的解决方案
?- difference(dateobject(1,28),dateobject(6,1),N),write(N),nl.
days(1,31).
days(2,28).
days(3,31).
days(4,30).
days(5,31).
days(6,30).
days(7,31).
days(8,31).
days(9,30).
days(10,31).
days(11,30).
days(12,31).
daysbetween(M,FD,M,TD,N) :- !, N is TD - FD.
daysbetween(FM,FD,TM,TD,N) :-
days(FM,D),
FM2 is FM + 1,
daysbetween(FM2,FD,TM,TD,N2),
N is D + N2.
difference(dateobject(FM,FD),dateobject(TM,TD),N) :-
TM >= FM,
FD >= 1,
days(FM,FDM),
FD =< FDM,
TD >= 1,
days(TM,TDM),
TD =< TDM,
daysbetween(FM,FD,TM,TD,N),
N > 0,
!.
difference(_,_,-1).
?-差异(dateobject(1,28),dateobject(6,1),N),写入(N),nl。
天(1,31)。
天(2,28)。
天(3,31)。
天(4,30)。
天(5,31)。
天(6,30)。
天(7,31)。
天(8,31)。
天(9,30)。
天(10,31)。
天(11,30)。
天(12,31)。
日之间(M,FD,M,TD,N):-!,N是TD-FD。
时间间隔(FM、FD、TM、TD、N):-
天(FM,D),
FM2是FM+1,
两天之间(FM2、FD、TM、TD、N2),
N是D+N2。
差异(dateobject(FM,FD),dateobject(TM,TD),N):-
TM>=FM,
FD>=1,
天数(FM、FDM),
FD==1,
天(TM,TDM),
TD=0,
!.
差异(u,u,-1)。
什么是“对象之间的差异”呢?我不明白你所说的“将两个对象注册为我可以操作的单独对象”是什么意思?@Enigmativity基本上这些对象代表一个月内的几天:天(1,31)。差异(dateobject(4,30),dateobject(5,15),N)。是的,我理解这一点“对象之间的差异"意思是?@Engmativity区别在于两个约会对象之间的天数。我很快会测试它,然后给你回复。不过别说它不好,它比我想出的任何东西都好,你不知道我有多感激你在这里给我的所有帮助。等我回到我的电脑后会测试吗先生,你是个十足的法律人物钕。
?- difference(dateobject(1,28),dateobject(6,1),N),write(N),nl.
days(1,31).
days(2,28).
days(3,31).
days(4,30).
days(5,31).
days(6,30).
days(7,31).
days(8,31).
days(9,30).
days(10,31).
days(11,30).
days(12,31).
daysbetween(M,FD,M,TD,N) :- !, N is TD - FD.
daysbetween(FM,FD,TM,TD,N) :-
days(FM,D),
FM2 is FM + 1,
daysbetween(FM2,FD,TM,TD,N2),
N is D + N2.
difference(dateobject(FM,FD),dateobject(TM,TD),N) :-
TM >= FM,
FD >= 1,
days(FM,FDM),
FD =< FDM,
TD >= 1,
days(TM,TDM),
TD =< TDM,
daysbetween(FM,FD,TM,TD,N),
N > 0,
!.
difference(_,_,-1).