たとえば、グラフのパスを見つけるために、プロローグでプログラムを作成する必要があります。
edge(a, b).
edge(a, c).
edge(c, b).
テストケースは次のとおりです。
/* test case 1 */
?- path(a, b, P).
P = [a, b] ;
P = [a, c, b] ;
false.
/* test case 2 */
?- path(c,b,[c,b]).
true.
そして私のコードは
path(X,Y,[X,Y]):-
edge(X,Y).
path(X,Z,[X|P]):-
edge(X,Y),
path(Y,Z,P).
ただし、テストケース2の場合、私のコードは表示されます
?- path(c,b,[c,b]).
true;
false.
ケース 2 の false を削除するには、コードにカットを追加する必要があることはわかっていますが、ケース 1 の false も削除されます。どうすればこの問題を解決できますか?