Prolog - substituindo subtermos

Estou fazendo alguns exames do passado para praticar para o exame e me deparei com uma pergunta que não sei ao certo como resolver:

Eu sei que tenho que usar a função "univ" para dividir o termo em uma lista e, em seguida, recorrer a essa lista e verificar se algum dos elementos da lista é igual ao termo que queremos substituir. No entanto, estou um pouco perdido com a repetição dupla quando a lista contém outro termo complexo que precisamos detalhar ainda mais. Minha tentativa até agora é a seguinte:

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.

Qualquer dica será muito apreciada. Observe que, para o exame, não podemos usar módulos externos.

Obrigado pelo seu tempo.

questionAnswers(1)

yourAnswerToTheQuestion