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时却很困难。再次感谢,非常感谢。