我正在尝试编写一个程序来查找城镇之间的路线,添加路径到列表然后,广告结束显示它。 我认为添加到列表工作,但我有问题显示列表,不知道如何将列表作为参数传递,以便在找到路径时使用?希望你们能帮忙。这是代码:
connected(middlesbrough, stockton).
connected(middlesbrough, darlington).
connected(stockton, sunderland).
connected(darlington, thirsk).
connected(stockton, newcastle).
connected(newcastle, york).
connected(thirsk, york).
connected(york, leeds).
connected(leeds, huddersfield).
connected(leeds, dewsbury).
connected(huddersfield, manchester).
connected(dewsbury, manchester).
run(List):-
write('Enter Starting City :'),
read(Start),
write('Enter Finishing City :'),
read(End),
findroute(Start,End),
writeList([List]).
findroute(Start,End):-
connected(Start,End).
findroute(Start,End):-
add(Start, List, [Start | List]),
connected(Start,Link), findroute(Link,End).
add(A,B,[A|B]).
writeList([]).
writeList([Head | Tail]):-
write(Head),
nl,
writeList(Tail).
答案 0 :(得分:2)
您的findroute/2
谓词不会返回列表,因此输出无效。
调用应如下所示:findroute(Start,End,List)
显然,findroute/2
谓词必须更改为findroute/3
:
findroute(Start,End,[Start,End]):-
connected(Start,End).
findroute(Start,End,List):-
connected(Start,Link),
add(Start,Rest,List),
findroute(Link,End,Rest).
(提示:请确保您理解为什么add/3
调用有效,即使Rest在此时未实例化。否则您的导师将不相信此代码是您的作业!;-))
如果您只想找到最短的路线,可能需要在第一个子句的末尾添加剪切。
最后,List已经是一个列表了,所以在调用writeList/1
时不要在它周围加上方括号!