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

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

Я знаю, что мне нужно использовать функцию «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.

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос