假设我的结构time
格式为time(hour, minute)
。我如何编写规则来比较它们?如果time1严格地在time2之前,则compareTime(time1,time2)的行返回yes。
在与C合作多年后,我刚刚开始使用Prolog,整个语言对我来说非常混乱。
答案 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)
假设小时数(H
,H1
,H2
)和分钟(M1
,M2
)是数字,您可以将其写为:< / p>
earlier(time(H, M1), time(H, M2)) :- !, M1 < M2.
earlier(time(H1, _), time(H2, _)) :- H1 < H2.
第二行中的下划线是匿名变量,即如果我们只是通过查看小时数来决定早些时候,我们就不会为分钟指定名称。