Мне было лень отследить фактическую ошибку, но следующий, упрощенный код
in_scope(X,Y,List) :- member(Y,List), in(X,List).
in_scope(X,Y,List) :- member(Sub,List), in_scope(X,Y,Sub).
in(X,List) :- member(X,List).
in(X,List) :- member(Sub,List), in(X,Sub).
дает ожидаемые результаты:
?- in_scope(x,z,[x,y,z]).
true .
?- in_scope(x,z,[[x,y],z]).
true .
?- in_scope(x,z,[[[[[x],y]],z]]).
true .
?- in_scope(x,a,[[[[[x],y]],z]]).
false.
Но обратите внимание на следующее; Я не уверен, что это предполагаемое поведение:
?- in_scope(x,x,[x]).
true .