Prolog 创建返回日期的列表

Prolog 创建返回日期的列表,prolog,Prolog,我目前有一个数据库,其中包括一个名单的人,他们已经发送了一条消息给谁和日期的消息被发送。见下文: message(allan, steve, 2013-09-03). message(nayna, jane, 2013-09-03). message(steve, jane, 2013-09-04). message(steve, allan, 2013-09-04). message(mark, martin, 2013-09-04). message(martin, steve,

我目前有一个数据库,其中包括一个名单的人,他们已经发送了一条消息给谁和日期的消息被发送。见下文:

message(allan, steve, 2013-09-03). 
message(nayna, jane, 2013-09-03). 
message(steve, jane, 2013-09-04). 
message(steve, allan, 2013-09-04). 
message(mark, martin, 2013-09-04). 
message(martin, steve, 2013-09-04). 
message(allan, martin, 2013-09-05).
message(P1,P2,Date),D=Date,print([D]); message(P2,P1,Date),D=Date,print([D]).
对于我的一项任务,我需要创建一个规则,该规则返回到日期(D)为止,人员1(P1)和人员2(P2)交换消息的所有日期的列表

到目前为止,我有以下几点:

message(allan, steve, 2013-09-03). 
message(nayna, jane, 2013-09-03). 
message(steve, jane, 2013-09-04). 
message(steve, allan, 2013-09-04). 
message(mark, martin, 2013-09-04). 
message(martin, steve, 2013-09-04). 
message(allan, martin, 2013-09-05).
message(P1,P2,Date),D=Date,print([D]); message(P2,P1,Date),D=Date,print([D]).
我需要一个规则,只返回所有日期的列表,而不必输入
每次


我知道这条规则需要修改,因此非常感谢您的帮助/建议

您可能希望显示的代码成为您规则的主体

my_规则(P1、P2、D):-
消息(P1,P2,日期),D=日期,打印([D]);消息(P2,P1,日期),D=日期,打印([D])。

当然,对于给定日期之前的日期,我们需要
@您是否在NSA?一些相关帖子:注意
D=date,print([D])
相当于
print([date])
,因为您没有使用
D
任何其他方式。另外,您是否可以使用
findall/3
setof/3
?+1来回答清晰的问题。好的,谢谢!使用findall/3和setof/3有什么区别?我们可以使用其中任何一种,但我们需要能够理解和解释@mbratchso我是否可以将上面所示的所有规则(除了第一段代码)插入SWI Prolog,并显然用实际数据替换P1、P2和日期@WillNessI我对Prolog一点也不熟悉!但这对我有帮助@willness,我会用“Date”替换这些点吗s@WillNessall
my_rule
除了最后一个之外的变体都有bug。将它们插入到文件中,然后从SWI“查阅”该文件。一种方法是将代码保存在文件“code.pl”中,然后在SWI的提示下键入
[code]。
(输入)。或者您可以键入
[user]
,然后将代码复制粘贴到打开的辅助提示中。-关于点:不,不是日期。还有什么是您想要(提示)实例化的(即将其设置为某个值)?我们可以通过在一些谓词中使用logvars来实例化它的一些参数(例如,
setof
),也可以直接通过
DateList=[]
)来实例化logvars。这是一个非常好的分解,但是您在D@?中使用符号“@”是什么意思呢?。