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