Я пытаюсь написать код Пролога, чтобы определить, находится ли связанная переменная X
в области связанной переменной Y
в списке. Списки могут быть вложенными и X
находится в области Y
, если X
и Y
являются членами одного и того же списка, или если X
является участником списка, который является членом списка, являющегося членом списка ... (вложенные на неопределенный срок), который находится в том же списке, что и Y
. Здесь я определяю in_scope(X,Y,List)
так, что X
находится в диапазоне Y
в самом дальнем конце List
. Я написал следующий код, но этот код приводит к переполнению стека:Переполнение стека в Prolog
in_scope(X,Y,List) :- in(Parent,List), member(X,Parent), member(Y,Parent).
in_scope(X,Y,List) :- in(X,Parent), in_scope(Parent,Y,List).
in(X,Y) :- member(X,Y).
in(X,Y) :- member(X,Z), in(Z,Y).
Я был бы признателен за помощь в изменении кода, чтобы избежать переполнения стека.
Спасибо! И должен ли 'in_sublist (X, Sub)' быть 'in (X, Sub)'? – sentinel
Да, извинения. Я переименовал предикат, а затем переименовал его. –
Добро пожаловать. Я нашел хотя бы одну ошибку в предикате 'in/2'. Менялось изменение имен переменных на что-то понятное :) –