假设我有一个time
格式的结构time(hour, minute)
.我如何编写规则来比较它们?如果time1严格在time2之前,则compareTime(time1,time2)的行返回yes.
在与C合作多年后,我刚刚开始使用Prolog,整个语言对我来说非常混乱.
标准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 = (>).
Run Code Online (Sandbox Code Playgroud)
所以...
earlier(T1, T2) :- compare((<), T1, T2).
Run Code Online (Sandbox Code Playgroud)
假设小时(H
,H1
,H2
)和分钟(M1
,M2
)是数字,你可以写为:
earlier(time(H, M1), time(H, M2)) :- !, M1 < M2.
earlier(time(H1, _), time(H2, _)) :- H1 < H2.
Run Code Online (Sandbox Code Playgroud)
第二行中的下划线是匿名变量,即如果我们可以通过查看小时数来确定更早的时间,我们就不会为分钟指定名称.