Если реализация пролога поддерживает табулирование или вы используете XSB, вы можете использовать его и получить желаемое поведение.
Вы также можете добавить аргумент состояния:
%State = [Checked_for_equiAngular, Checked_for_equiLateral]
equiAngularTriangle(T, [_,false]) :-
equiLateralTriangle(T, [true,true]).
equiLateralTriangle(T, [false,_]) :-
equiAngularTriangle(T, [true,true]).
конечновам нужно будет изменить остальные пункты.
Последний (и лучший imo) вариант - переписать ваши предикаты.Я предполагаю, что ваш код будет похож на этот пример:
ang(T):-
foo(T).
ang(T):-
lat(T).
lat(T):-
bar(T).
lat(T):-
ang(T).
, поэтому вы можете просто написать:
ang(T):-
foo(T).
ang(T):-
bar(T).
lat(T):-
ang(T).
обычно вы будете использовать некоторые предикаты-обертки, если вместо foo (T)у вас был foo1 (T), foo2 (T) и т. д.