Хитрость здесь в том, чтобы иметь вложенные итерации - итерации по N..1
, вложенные в итерации по элементам исходного списка.Это работает в SWI-Prolog: repeat_list ([], [], _): -!.
repeat_list(_,[],0) :- !.
repeat_list(X,Y,N) :-
N > 0,
repeat_list(N,N,X,Y),
!.
repeat_list(_,_,[],[]) :- !.
repeat_list(1,N,[H|List1],[H|List2]) :-
repeat_list(N,N,List1,List2).
repeat_list(M,N,[H|List1],[H|List2]) :-
L is M - 1,
repeat_list(L,N,[H|List1],List2).
NB Старайтесь не использовать имена стандартных предложений, такие как repeat
, для целей, отличных от стандартных намеренийиспользовать его для.