在 Prolog 中用格式 (XX:XX) 比较两次的子规则

Subrule to compare two times with format (XX:XX) in Prolog

我正在尝试比较两次,看看哪个时间比另一个时间少。一个示例实现是 ArrivalTime < DepartureTime2,其中 ArrivalTime 和 DepartureTime2 都可以采用格式 (XX:XX) 的值,例如 12:00 或 15:50。我正在考虑将 XX:XX 格式转换为常规的 XXXX 格式,但我不知道该怎么做。还有其他方法可以解决这个问题吗?

不需要。写为 12:0015:50 的时间是有效的 Prolog 项。您可以使用术语比较(而不是算术比较)来比较它们:

?- 12:00 @< 15:50.
true.

?- 12:00 @< 5:50.
false.

您应该阅读您正在使用的 Prolog 的文档。例如,在 SWI-Prolog 中,相关部分是 "Standard order of terms".

顺便说一句,如果您想知道 Prolog 如何将术语视为 15:50

?- write_canonical(15:50).
:(15,50)
true.

这告诉您 15:50 被解释为带有函子 :/2 的项,小时作为第一个参数,分钟作为第二个参数。这是有效的,因为 : 被声明为运算符:

?- current_op(Precedence, Type, :).
Precedence = 600,
Type = xfy.

您可以像 h_m(15, 50) 一样使用表示法。这些术语将以相同的方式排序:

?- h_m(12, 00) @< h_m(15, 50).
true.