組み込みの述語 member(x, List) は、メンバーがリストに存在するかどうかをチェックしますが、リスト内にリストがある場合は、最初の深さだけをチェックします。メンバーがどのくらいの深さにいるのかを正確に調べようとしています。例:
?- memberDepth(a, [b, c, [d], [[e, f, [], [g], a], j], [k]], Depth).
Depth = 3 .
基本的に、リスト内の「a」の最初のインスタンスの深さを見つけます。メンバーが存在しない場合は、深さ = 0 が返されます。メンバーのすべてのインスタンスの深さを順番に見つけることができれば、それも役に立ちます。次に例を示します。
?- memberDepthAll(a, [b, c, [a], [[e], a], [[a]]], Depth).
Depth = 2 ;
Depth = 2 ;
Depth = 3 ;
Depth = 0 ;
false.
私はプロローグに非常に慣れていないので、助けていただければ幸いです。