В программировании на Прологе сложно привыкнуть и определить фактические шаблоны рекурсии.Во многих случаях лучше не думать непосредственно о рекурсиях, а спросить, может ли здесь работать какая-то простая для всех конструкция.
В этом случае вам нужна связь между списком списков и другим списком списков.,Оба имеют одинаковую длину, поскольку элементы соответствуют друг другу поэлементно.
appendAll(Prefix, Lists, Prefixedlists) :-
maplist(append(Prefix), Lists, Prefixedlists).
Предикат maplist/3
определен во многих системах Пролога.Если нет, определите это так в системе, соответствующей ISO:
maplist(_Cont_2, [], []).
maplist(Cont_2, [X|Xs], [Y|Ys]) :-
call(Cont_2, X, Y),
maplist(Cont_2, Xs, Ys).
То же самое, что и в простом предикате:
maplist_append(Prefix, [], []).
maplist_append(Prefix, [X|Xs], [Y|Ys]) :-
append(Prefix, X, Y),
maplist_append(Prefix, Xs, Ys).