我对于path_to_phone(1,16,Path)一直是错误的。并且无法找出错误在代码中的位置。
array([300, 480, 506])
答案 0 :(得分:1)
从美学的角度来看,它看起来像这样更好:
move(Start, End, Visit, Path) :- rooms_connected(Start, Middle),
End \== Middle,
\+member(Middle, Visit),
move(Middle, End, [Middle|Visit], Path).
问题在于您对rooms_connected的定义,因为它强制双向建立连接。如果那是您想要的目的,则必须将其放入文件门(15,14)和其他文件中,因为到目前为止,它无法找到路径。 如果没有,您可以将其更改为:
rooms_connected(X, Y) :- door(X, Y); door(Y, X).
这意味着门(X,Y)或门(Y,X)。
答案 1 :(得分:0)
我认为应该更简单,无需绕开令人困惑的中间语:
path_to_phone(Start, End, Path) :-
move(Start, [Start], [End|RPath]),
reverse([End|RPath], Path).
move(From, Visit, [Phone|Visit]) :-
door(From, Phone),
phone(Phone).
move(From, Visit, Path) :-
door(From, Next),
\+memberchk(Next, Visit),
move(Next, [Next|Visit], Path).