两个设定时间之间的Prolog

两个设定时间之间的Prolog,prolog,Prolog,长话短说 我有一个名为timeline.pl的文件,它有一个pradicate(r,s,t)-r是列车的名称,s是它停靠的车站列表,t是它们停靠的给定时间列表 文件timeline.pl定义了一个谓词nextTime,这样,如果t2在t1之后五分钟,则next时间(t1,t2)保持不变 我必须在t1之后定义一个谓词si,如果t2在午夜之后和之前,则t2保持不变 这里我只需要一些指导。作为起点,您需要考虑一种合理的方式来表示一天中的时间 Prolog允许您使用自己的函子来按自己的意愿构造数据。因此

长话短说

我有一个名为timeline.pl的文件,它有一个pradicate(r,s,t)-
r
是列车的名称,
s
是它停靠的车站列表,
t
是它们停靠的给定时间列表

文件
timeline.pl
定义了一个谓词
nextTime
,这样,如果
t2
t1
之后五分钟,则next
时间(t1,t2)
保持不变

我必须在
t1
之后定义一个谓词si,如果
t2
在午夜之后和之前,则
t2
保持不变


这里我只需要一些指导。

作为起点,您需要考虑一种合理的方式来表示一天中的时间

Prolog允许您使用自己的函子来按自己的意愿构造数据。因此,您可以使用
name(fred)
和您编写的代码来处理或操纵这段信息。除了知道它是一个函子
名称
和一个参数,一个原子,
fred
,Prolog对它没有任何特殊意义

这也适用于中缀函子。因此,您可以将一天中的某个时间表示为,
HH:MM
。比如说,

Time = 12:42.
这里,用户定义的函子是
,它有两个整数参数:
12
42
。这也可以写成,
:'(12,42)

如果我有一个使用此表示法的时间
time
,我可以通过将其与函子形式统一来分离小时和分钟:

| ?- Time = 12:42, Time = Hours:Minutes.

Hours = 12
Minutes = 42
Time = 12:42

yes
| ?- 
如果必须使用时间、
T1
T2
,并且它们使用此表示法,则只需将其组成的小时和分钟作为整数值进行比较,即可对这两个时间进行比较。假设24小时格式,如果
Time1=H1:M1
Time2=H2:M2
,则
Time1
小于
Time2
如果
H1
,或者如果
H1=H2
M1


这在24小时内运行良好。如果您想使用AM/PM指示器使用12小时的时间,您可以使用多种方法,例如,
tod(HH:MM,AMPM)
(示例:
tod(12:42,AM)
),或
[HH:MM,AMPM]
(示例:
[12:42,PM]
)。当需要比较和操作时间时,24小时格式更容易:

你能展示一下你的
timeline.pl
文件的样本吗?你能举个例子,说明你希望你的新谓词的行为吗?从你的描述中不清楚这就是问题所在,我们从来没有得到过。。这正是它所说的:timetime.pl的一个例子是:trains(kx12000,[伦敦,彼得堡,约克,纽卡斯尔,爱丁堡],'12':'00','12':'45','13':'55','14':'50:,'16:'20'])我很难理解的句子是,我必须在t1之后定义一个谓语si,如果t2在午夜之后和之前,t2保持不变。。这就是问题的症结所在吗?@mbrach抱歉,英国来晚了,我已经起床一整天了!它读起来就像“定义一个谓词,这样after(t1,t2)保持,如果t2在t1之后的任何时间,但在午夜之前,这是非常有用的,我尝试了..after(t1,t2)但是我得到了一个错误——未定义procedure@CeriWestcott-如果您不介意的话,您需要显示您的代码。另外,请注意谓词必须以小写字母开头,
after
not
after
。变量必须以大写字母
T1
not
T1
开头。