Ну, проблема в том, что операция или выполняется в строке ignore(printNum(A1, B)); A > B
, а не во всем предикате.Если вы немного измените код:
printNum(A, B) :-
(A =< B,
writeln(A),
A1 is A + 1,
ignore(printNum(A1, B))
;
A > B,
writeln(error)).
Таким образом, логическая операция или будет работать правильно, и вы получите желаемый результат.