LONG STORY SHORT
我有一个名为timetable.pl的文件,其中有一个pradicate(r,s,t) - r
是列车的名称,s
是它停靠的站点列表,{ {1}}是他们停止的给定时间列表。
文件t
定义谓词timetable.pl
,以便nextTime
在time(t1,t2)
后五分钟t2
时保持下一个t1
。
我必须在t1
之后定义一个谓词,如果t2
在午夜之后和之前,我必须保持t2
。
我只需要一些指导。
答案 0 :(得分:1)
作为一个起点,您想要考虑一种合理的方式来表示一天中的时间。
Prolog允许您使用自己的仿函数来根据需要构建数据。因此,您可以使用name(fred)
并使用您编写的代码处理或处理此信息。除了知道它是一个仿函数name
和一个参数,一个原子,fred
之外,Prolog并没有赋予它任何特殊含义。
这也适用于中缀函子。因此,您可以将时间表示为HH:MM
。例如,
Time = 12:42.
此处,用户定义的仿函数为:
,它有两个整数参数:12
和42
。这也可以写成':'(12,42)
。
如果我有时间Time
使用此表示,我可以通过将其与functor表单统一来分隔小时和分钟:
| ?- 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 < H2
,或H1 = H2
和{ {1}}。
这适用于24小时。如果您希望12小时与AM / PM指示符一起使用,则可以通过多种方式执行此操作,例如M1 < M2
(例如:tod(HH:MM, AMPM)
)或tod(12:42, am)
(例如: [HH:MM, AMPM]
)。当必须比较和操纵时间时,24小时格式更容易。 :)