Вы, похоже, пытаетесь получить предикат Пролога для возврата либо true
, либо false
. Это не так, как работает Пролог. Предикат либо успешен, либо неудачен. Они ничего не возвращают.
Кроме этого, ваш код близок.
Первый случай, который вам нужно охватить, это когда A < B
.
modulo(A,B,A) :- A < B.
Если A < B
и первое и третье слагаемые совпадают, то этот предикат должен быть успешным.
Следующий случай - когда A >= B
.
modulo(A,B,C) :-
A >= B,
A1 is A - B,
modulo(A1,B,C).
И это все.
Обратите внимание, я ничего не вернул. Все, что мы хотим сказать, это «удалось ли это».
При попытке ?- modulo(7,7,1).
я получаю No.
, но при попытке ?- modulo(7,2,1).
я получаю Yes.
.