1
我需要在序言写一个程序寻找路径,例如,对于图:路径寻找在序言
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中的错误。我怎么解决这个问题?
当我在SWI-Prolog中尝试这个时,我在第二种情况下得到一个错误。 – RonaldBarzell
这是因为原子的名称,我有正确的。对于那个很抱歉 –