我正在尝试在prolog中编写一个简单的迷宫搜索程序,然后我将一个房间添加到访问列表中,我正在检查它是否已经是访问列表的成员。但是,即使我使用本书中的代码,我也无法使用它:
d(a,b).
d(b,e).
d(b,c).
d(d,e).
d(c,d).
d(e,f).
d(g,e).
go(X, X, T).
go(X, Y, T) :-
(d(X,Z) ; d(Z, X)),
\+ member(Z,T),
go(Z, Y, [Z|T]).
我做错了什么?
答案 0 :(得分:4)
你的程序似乎还可以。 我想问题是你用第三个参数uninstantiated调用go / 3。 在这种情况下,成员(X,T)将始终成功,从而使该条款失败。
您可以使用空列表作为第三个参数调用谓词: e.g。
?- go(a, g, []).
true
如果要返回路径,请考虑添加另一个参数,如下所示:
go(From, To, Path):-
go(From, To, [], Path).
go(X, X, T, T).
go(X, Y, T, NT) :-
(d(X,Z) ; d(Z, X)),
\+ member(Z,T),
go(Z, Y, [Z|T], NT).