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.