Recursion 如何获得Prolog_2的往返旅行结果

Recursion 如何获得Prolog_2的往返旅行结果,recursion,prolog,Recursion,Prolog,我问过关于旅行的问题 byCar(auckland,hamilton). byCar(hamilton,raglan). byCar(valmont,saarbruecken). byCar(valmont,metz). byTrain(metz,frankfurt). byTrain(saarbruecken,frankfurt). byTrain(metz,paris). byTrain(saarbruecken,paris). byPlane(frankfurt,bangkok). b

我问过关于旅行的问题

byCar(auckland,hamilton).
byCar(hamilton,raglan).
byCar(valmont,saarbruecken).
byCar(valmont,metz).

byTrain(metz,frankfurt).
byTrain(saarbruecken,frankfurt).
byTrain(metz,paris).
byTrain(saarbruecken,paris).

byPlane(frankfurt,bangkok).
byPlane(frankfurt,singapore).
byPlane(paris,losAngeles).
byPlane(bangkok,auckland).
byPlane(losAngeles,auckland). 
我已就此作出修订:

connect(X,Y,byCar):- byCar(X,Y) ; byCar(Y,X).
connect(X,Y,byTrain):- byTrain(X,Y) ; byTrain(Y,X).
connect(X,Y,byPlane):- byPlane(X,Y) ; byPlane(Y,X).

travel(X,Y):-X\=Y,travelLoop(X,Y,Passed).  
travelLoop(X,Y,Passed):-connect(X,Thru,byCar);
      connect(X,Thru,byTrain);
      connect(X,Thru,byPlane);
      \+memberchk(Thru,Passed),travelLoop([Thru|Passed],Y,Thru). 
travelLoop(X,Y,Path):- X=Y. 
travel(X,Y):-travel_Path(X,Y,[X]), 
      travel_Path(Y,X,[Y]) -> true ; wrong. 
wrong:- writeln('Wrong travel input, please try again.'), nl.
它工作得很好。我能再请你帮我一个忙吗?那就是能够展示所有可供选择的往返旅行路线。只是用一种方法得到了它

(c)

(d)

有什么建议吗

(c)的输出,如果我输入
from=valmont,to=paris
,它给出:

go(valmont,saarbruecken,go(saarbruecken,paris))
go(valmont,metz,go(metz,paris))
(d)项的情况也一样


你的代码有很多问题。我建议清理你的问题,发布格式良好的实际代码,至少产生一些结果。我不明白为什么它不能正常工作。我已经给他们贴上了标签@你的问题应该是独立的。你不能指望我们从你上一个问题、你的答案和这个新问题中收集你的代码。即使我们做到了,我们又如何确定我们做得对呢?在此发布您运行的文件,完整。在一个代码块中完成,不会占用太多的屏幕空间(将显示为一个侧边有滚动条的窗口)。向我们展示您运行的命令、您得到的结果以及您想要得到的结果。就目前而言,我怀疑你能否以目前的形式回答这个问题(
travel1(X,Y,go(X,Y,car)):-byCar(X,Y).
travel1(X,Y,go(X,Y,train)):-byTrain(X,Y).
travel1(X,Y,go(X,Y,plane)):-byPlane(X,Y).
travel1(X,Y,go(X,Z,V,W)):-travel1(X,Z,go(X,Z,V)),travel1(Z,Y,W).

findall(Y,travel1(A,B,Y),List1),nl,
      writelist(List1).  

writelist([]).
writelist([L|Lt]):-write(L),nl,writelist(Lt). 
go(valmont,saarbruecken,go(saarbruecken,paris))
go(valmont,metz,go(metz,paris))
go(valmont,saarbruecken,car,go(saarbruecken,paris,train))
go(valmont,metz,car,go(metz,paris,train))