X
バインドされた変数がリスト内のバインドされた変数のスコープ内にあるかどうかを判断する Prolog コードを作成しようとしてY
います。リストは入れ子にすることができ、同じリストのメンバーである場合、またはあるリストのメンバーであるリストのメンバーであるリストのメンバーである場合X
のスコープ内にあります...(無期限にネストされています)と同じリスト。ここでは、最も外側の listの範囲内にあることを意味するように定義します。次のコードを書きましたが、このコードではスタック オーバーフローが発生します。Y
X
Y
X
Y
in_scope(X,Y,List)
X
Y
List
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).
スタック オーバーフローを回避するためにコードを修正していただければ幸いです。