Сравнение времени в Прологе - PullRequest
4 голосов
/ 24 января 2011

Скажем, у меня есть структура time с форматом time(hour, minute). Как мне написать правило для их сравнения? Нечто похожее на строчку CompareTime (time1, time2), которое возвращает yes, если time1 строго раньше time2.

Я только начинаю работать с Прологом после нескольких лет работы с Си, и весь язык очень смущает меня.

Ответы [ 2 ]

6 голосов
/ 24 января 2011

Стандартный предикат 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).
5 голосов
/ 24 января 2011

Предполагая, что часы (H, H1, H2) и минуты (M1, M2) являются числами, вы можете записать их как:

earlier(time(H, M1), time(H, M2)) :- !, M1 < M2.
earlier(time(H1, _), time(H2, _)) :- H1 < H2.

Подчеркиваниево 2-й строке находятся анонимные переменные, то есть мы не удосуживаемся присваивать имена минутам, если мы можем решить, какое время раньше, просто посмотрев на часы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...