Prolog 序言日期时间戳

Prolog 序言日期时间戳,prolog,Prolog,尝试在prolog中制定一个规则,该规则将询问在给定日期之前是否有两个人之间发送的任何消息(两个人都可以是消息的接收者或发送者)。调用是否为真后,打印两个用户在给定时间之前交换消息的所有日志 到目前为止我想 msgbefore(X,Y,D) :- message(X,Y,D1), date_time_stamp(D), date_time_stamp(D1), D1 < D, message(Y,X,D1), date_time_stamp(D),

尝试在prolog中制定一个规则,该规则将询问在给定日期之前是否有两个人之间发送的任何消息(两个人都可以是消息的接收者或发送者)。调用是否为真后,打印两个用户在给定时间之前交换消息的所有日志

到目前为止我想

msgbefore(X,Y,D) :-
    message(X,Y,D1),
    date_time_stamp(D),
    date_time_stamp(D1),
    D1 < D, 
message(Y,X,D1),
    date_time_stamp(D),
    date_time_stamp(D1),
    D1 < D.
请提供帮助,

只是一个提示:需要两个参数,使用起来相当困难,但由于您的日期是以标准形式作为原子提供的,您可以直接比较它们。比如说

1 ?- message(A,B,Date),Date @< '2012-05-13'.
A = sonny,
B = robert,
Date = '2012-05-12' ;
...
<代码>1?-消息(A、B、日期),日期<'2012-05-13'。 A=桑儿, B=罗伯特, 日期='2012-05-12'; ...
这是重复的:我在互联网上搜索了所有内容,是的,我发现了多篇围绕同一任务的帖子,但是,每次我尝试使用他们的解决方案时,发现规则不正确。我写了我自己的帖子,因为你发给我的链接现在是一个封闭的帖子,没有给定的解决方案,而所有其他帖子似乎都没有帮助。对于手头的任务,我应该让prolog软件查看大型附加数据库,并比较两个人之间发送的所有消息,我不应该声明数据库中的日期或消息是什么。可以这样做吗?1?-消息(A、B、日期),日期@msgbefore谓词试图执行的操作提供了解决方案。也许你可以更新你的问题,清楚地指出你想输入什么,以及你希望得到什么样的结果。@user3155657:一个可能的定义
msgbefore(X,Y,D):-message(X,Y,D1),@D1@
sry如果我没有说清楚,我的任务是在prolog中创建一个规则,这将检查2个Inidividuals是否在设定的时间之前交换了消息。有了这个,我会按照msgbefore(sonny,robert,'2012-06-12')的思路问序言。从那以后,软件将检查整个数据库(我只在其中放置了一个大型数据库的小示例),并声明该查询是否为真。从那以后,我还被要求打印所有消息日志,其中在该时间之前交换来自inidiviudals的消息。@user3155657:抱歉,我在上面的评论中添加了一个bug:日期应该是D。这个bug会给你带来问题吗?
1 ?- message(A,B,Date),Date @< '2012-05-13'.
A = sonny,
B = robert,
Date = '2012-05-12' ;
...