Как указал Пауло Моура , повторный заказ решит часть проблемы. Изящное завершение его может быть достигнуто путем добавления дополнительного условия для обработки рекурсивного условия завершения.
Попробуйте это.
countAtoB(A,B,A) :-
A =:= B, !.
countAtoB(A,B,A) :-
A < B.
countAtoB(A,B,I) :-
A < B,
X is A+1,
countAtoB(X,B,I).
Тогда запросы будут выглядеть так. Для сравнения я повторил тот же набор тестовых запросов, используя между / 3 , сразу после.
?- countAtoB(1,4,I).
I = 1 ;
I = 2 ;
I = 3 ;
I = 4.
?- countAtoB(4,4,I).
I = 4.
?- countAtoB(4,1,I).
false.
?- countAtoB(4,1,1000).
false.
?- between(1,4,I).
I = 1 ;
I = 2 ;
I = 3 ;
I = 4.
?- between(4,4,I).
I = 4.
?- between(4,1,I).
false.
?- between(4,1,1000).
false.
?-