У меня возникли проблемы с написанием относительно простого предиката в Prolog. Предполагается, что этот предикат получит два аргумента в формате Часы: Минуты, рассчитайте разницу между ними и проверьте, больше ли это значение или равно 40 минутам.Вычисление разницы во времени в прологе
Вот что я до сих пор:
time(Time1, Time2):-
X:Y =:= Time1, A:B =:= Time2, calculate_time(X, Y, A, B).
calculate_time(X, Y, A, B):-
Y - X =:= 0,
B - A >= 40, !.
calculate_time(X, Y, A, B):-
Y - X > 0.
Это, как вы можете себе представить, дает ошибку, а именно:
?- time(10:00, 10:55).
ERROR at clause 1 of user:time/2 !!
INSTANTIATION ERROR- in arithmetic: expected bound value
Итак, насколько я могу понять, что он думает что ему дали четыре аргумента. Почему он так реагирует? Кроме того, в начале файла, у меня есть следующие команды:
:-op(500,xfy,:).
:-op(600,xfy,/).
Этот предикат должен быть частью более крупной программы, таким образом, эти две линии должны находиться в файле. Я не использую какой-либо модуль, и я использую YAP.
Любая помощь будет оценена!
Подсказка: Вопреки тому, что года говорят (>)/2 оценивает, только (@>)/2 не оценивает. Проверьте: http://www.swi-prolog.org/man/arith.html –
Вы правы. Исправлен ответ – gusbro
Спасибо за помощь! –