Prolog中的时间比较

时间:2011-01-24 02:55:09

标签: prolog

假设我的结构time格式为time(hour, minute)。我如何编写规则来比较它们?如果time1严格地在time2之前,则compareTime(time1,time2)的行返回yes。

在与C合作多年后,我刚刚开始使用Prolog,整个语言对我来说非常混乱。

2 个答案:

答案 0 :(得分:6)

标准的compare/3谓词已经达到了你想要的效果:

?- compare(O, time(1,1), time(1,1)).
O = (=).

?- compare(O, time(1,1), time(1,2)).
O = (<).

?- compare(O, time(1,3), time(1,2)).
O = (>).

?- compare(O, time(1,3), time(2,2)).
O = (<).

?- compare(O, time(3,2), time(2,2)).
O = (>).

所以...

earlier(T1, T2) :- compare((<), T1, T2).

答案 1 :(得分:5)

假设小时数(HH1H2)和分钟(M1M2)是数字,您可以将其写为:< / p>

earlier(time(H, M1), time(H, M2)) :- !, M1 < M2.
earlier(time(H1, _), time(H2, _)) :- H1 < H2.

第二行中的下划线是匿名变量,即如果我们只是通过查看小时数来决定早些时候,我们就不会为分钟指定名称。