Вы могли бы написать Quotient#>=0, Quotient#=<Dividend
, но на самом деле вообще нет необходимости давать какие-либо априорные границы для этой переменной. Просто используйте
?- Remainder :: 0..8, Dividend #= Quotient * 9 + Remainder, Dividend = 12.
Remainder = 3
Dividend = 12
Quotient = 1
Yes (0.00s cpu)
Вы можете обобщить это для произвольных делителей и упаковать все это во вспомогательный предикат, такой как
divmod(Dividend, Divisor, Quotient, Remainder) :-
0 #=< Remainder, Remainder #=< Divisor-1,
Dividend #= Quotient*Divisor + Remainder.
Тогда ваш запрос станет
?- divmod(D, 9, Q, R), D = 12.
D = 12
Q = 1
R = 3
Yes (0.00s cpu)