Prolog中的时间比较

dc.*_*dc. 4 prolog

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

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

sal*_*lva 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 = (>).
Run Code Online (Sandbox Code Playgroud)

所以...

earlier(T1, T2) :- compare((<), T1, T2).
Run Code Online (Sandbox Code Playgroud)

  • `@ <`也会这样做.+1. (4认同)

Kaa*_*rel 5

假设小时(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)

第二行中的下划线是匿名变量,即如果我们可以通过查看小时数来确定更早的时间,我们就不会为分钟指定名称.