Я пытаюсь написать мета-интерпретатор в прологе для пролога, который бы возвращал максимально достигнутую глубину рекурсии в данной программе пролога.
Этот код фактически подсчитывает количество всех рекурсивных вызовов в программе:
rc( true, 0) :- !.
rc( ( Goal1, Goal2), N) :- !, %we have multiple goals
rc( Goal1, N1), %count recursive calls in Goal1
rc( Goal2, N2), %count recursive calls in goals Goal2
N is N1 + N2. %add both counters
rc( Goal, N) :-
clause( Goal, Body),
functor( Goal, F, A), %get functor and airity
rcount( F/A, Body, NF), %count calls of that functor/airity in the body
rc( Body, NB), %recursively process the body
N is NF + NB. %add counters
Я должен как-то отслеживать каждый отдельный путь рекурсии и сравнивать их глубины, но у меня возникают проблемы с определением этого в прологе. Может ли кто-нибудь указать мне правильное направление?
Спасибо.