В моем файле есть следующее прологическое выражение, которое само собой разумеется. У меня есть все необходимые функции, которые необходимы для этого правила (назовите его 1), реализованные и протестированные правильно.
cal(plus(X,Y),Z):-cal(X,int(Z1)),cal(Y,int(Z2)),add(Z1,Z2,Z3),Z=int(Z3) ; cal(X,real(Z1)),cal(Y,real(Z2)),add(Z1,Z2,Z3),Z=real(Z3).
После нескольких часов попыток я не смог понять следующее:
?-call(plus(int(9),int(10)),Z).
работает правильно и возвращает: -
Z = int(19).
но оно не объединяется с
?-call(plus(real(9.0),real(10.0),Z).
Я перепробовал многие вещи и пришел к выводу, что это связано с тем, что целочисленная часть (перед;) в правиле 1 была указана первой, а не вещественная часть (я обменял их на две, и она начала работать в обратном порядке). Он пытается объединиться с первой частью и повторяется. Поскольку такого факта не существует, он просто входит в бесконечный цикл.
Пожалуйста, укажите альтернативный способ сделать то же самое. Это единственная часть моего задания, которая осталась, и я нахожусь в ней часами.
Заранее спасибо!