Пролог - замена подтерм

Я делаю некоторые прошлые экзаменационные работы для практики для моего экзамена, и я столкнулся с вопросом, который я не совсем уверен, как решить:

Я знаю, что мне нужно использовать функцию «univ», чтобы разбить термин на список, а затем повторить этот список и проверить, совпадает ли какой-либо из элементов в списке с термином, который мы хотим заменить. Тем не менее, я немного растерялся с двойной рекурсией, когда список содержит еще один сложный термин, который мы должны разбить дальше. Моя попытка заключается в следующем:

complexTerm(X) :- nonvar(X), functor(X, _, A), A > 0.

replace(Term, Subterm, Subterm1, Term1) :-
    Term =.. [H|T],
    replaceSub([H|T], Subterm, Subterm1, Term1)

replaceSub([], Subterm, Subterm1, Term1).
replaceSub([H], Subterm, Subterm1, Term1) :- 
    atomic(X),
    H == Subterm, 
    H = Subterm1.
replaceSub([H], Subterm, Subterm1, Term1) :-
    complexTerm(H),
    replace(H, Subterm, Subterm1, Term1).
replaceSub([H|T]) :- % not sure where to continue with this.

Любые указатели будут высоко оценены. Обратите внимание, что для экзамена мы не можем использовать внешние модули.

Спасибо за ваше время.