Prolog - reemplazando subterms

Estoy haciendo algunos exámenes anteriores para practicar para mi examen, y me he encontrado con una pregunta que no estoy muy seguro de cómo abordar:

Sé que tengo que usar la función "univ" para dividir el término en una lista, y luego recurrir a esa lista y verificar si alguno de los elementos en la lista es igual al término que queremos reemplazar. Sin embargo, estoy un poco perdido con el doble recursivo cuando la lista contiene otro término complejo que tenemos que desglosar aún más. Mi intento hasta ahora es el siguiente:

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.

Cualquier puntero sería muy apreciado. Tenga en cuenta que para el examen no podemos usar módulos externos.

Gracias por tu tiempo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta