List Prolog-将列表作为要显示的参数发送
我正试图编写一个程序来查找城镇之间的路线,将路径添加到列表中,然后在末尾显示它。 我认为添加到列表中是可行的,但我在显示列表时遇到了问题,我不知道如何将列表作为参数传递,以便在查找完路径后使用?希望你们能帮忙。代码如下:List Prolog-将列表作为要显示的参数发送,list,prolog,List,Prolog,我正试图编写一个程序来查找城镇之间的路线,将路径添加到列表中,然后在末尾显示它。 我认为添加到列表中是可行的,但我在显示列表时遇到了问题,我不知道如何将列表作为参数传递,以便在查找完路径后使用?希望你们能帮忙。代码如下: connected(middlesbrough, stockton). connected(middlesbrough, darlington). connected(stockton, sunderland). connected(darlington, thirsk). c
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).
您的
findulote/2
谓词没有返回列表,因此输出无法工作
调用应该如下所示:findulote(开始、结束、列表)
显然,findulote/2
谓词必须更改为findulote/3
:
findroute(Start,End,[Start,End]):-
connected(Start,End).
findroute(Start,End,List):-
connected(Start,Link),
add(Start,Rest,List),
findroute(Link,End,Rest).
(提示:请确保您理解为什么即使Rest在那一点上未经演示,add/3
调用仍然有效。否则您的导师不会相信此代码是您的家庭作业!;-)
如果只想找到最短的路线,可能需要在第一个子句的末尾添加一个切口
最后,List已经是一个List,所以在调用
writeList/1
时不要在其周围加上方括号 谢谢,就这样。我已经做了很多编程(java、c#、php),我真的很喜欢它,但在使用prolog时却很困难。再次感谢,非常感谢。