Есть две возможности. Оба должны использовать дополнительные логические свойства Пролога.
(1) Вы собираете все факты в списке, а затем распечатываете первые N элементов этого списка, используя рекурсию. Этот подход очевиден, но он может быть неэффективным, когда имеется много фактов (например, тысяч), и только несколько из них будут записаны (например, 3).
print1(N) :-
findall(path(X), path(X), List),
print1(List, N).
print1([], N) :- !.
print1([H|T], N) :-
writeln(H),
N1 is N - 1, N1 > 0,
print1(T, N1).
?- print1(3).
(2) Вы можете использовать выдвижной счетчик и неисправную петлю. Этот подход менее изящен, чем первый, но будет более эффективным в случае, когда много фактов и только немногие из них написаны.
:- dynamic count/1.
print2(N) :-
assert(count(N)), !,
path(X), writeln(path(X)),
retract(count(K)),
K1 is K - 1,
(K1 > 0 -> assert(count(K1)); true, !),
fail.
?- print2(3).
Добавление : печать первых N "самых маленьких" фактов в порядке возрастания:
print_sorted(N) :-
findall(path(X), path(X), List),
msort(List, SortedList),
print1(SortedList, N).