У меня есть рекурсивный предикат, который застревает в бесконечном цикле и завершает работу программы. предикат, который кажется застрявшим в цикле, выглядит следующим образом
parts(sentence(_,VP), P) :-
parts(VP, P).
parts(vp(V), P) :- parts(V, P).
parts(vp(verb(V), np,( np2,( np2(noun(N)))), [likes(V), what(N)])).
Я ввожу R = sentence(np(np(det(an), np2(adj(old), np2(noun(father))))), vp(vp(verb(likes), np(det(a), np2(adj(good), np2(noun(book)))))))
, чтобы получить вывод verb(likes)
и noun(book)
Я читал на некоторых страницах, что мне может понадобиться добавить базовый регистр в цикл, чтобы предотвратить его постоянную форму, однако я не уверен, как реализовать его в коде.
Я просто бродил, как мне поступить с этим предикатом? Есть ли функция end
, которую я мог бы добавить к счетчику, который завершит функцию и перейдет к следующему шагу?