【发布时间】:2012-11-18 20:47:05
【问题描述】:
我需要在 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 中的错误。我该如何解决这个问题?
【问题讨论】:
-
当我在 SWI-Prolog 中尝试这个时,我在第二种情况下得到一个错误。
-
这是因为原子的名称,我已经更正了。对此感到抱歉