我需要在 prolog 中编写一个程序来查找路径,例如,对于图形:
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 中的错误,但它也会删除案例 1 中的错误。我怎么解决这个问题?