Recursion Prolog在递归和LPN练习方面有问题

Recursion Prolog在递归和LPN练习方面有问题,recursion,prolog,Recursion,Prolog,我需要做第3.4节的LPN实用3:编写一个旅行/3规则,用它可以搜索路线。() 我目前有以下解决方案: %% Base cases travel(X,Y, go(X,Y)) :- byCar(X,Y). travel(X,Y, go(X,Y)) :- byPlane(X,Y). travel(X,Y, go(X,Y)) :- byTrain(X,Y). %% Recursive cases travel(X,Y, go(X,Z,G)) :- travel(X,Z,go(X,Z)), trave

我需要做第3.4节的LPN实用3:编写一个旅行/3规则,用它可以搜索路线。()

我目前有以下解决方案:

%% Base cases
travel(X,Y, go(X,Y)) :- byCar(X,Y).
travel(X,Y, go(X,Y)) :- byPlane(X,Y).
travel(X,Y, go(X,Y)) :- byTrain(X,Y).

%% Recursive cases
travel(X,Y, go(X,Z,G)) :- travel(X,Z,go(X,Z)), travel(Z,Y,go(Z,Y)).
有了这些规则,它会找到一个解决方案,但在提交时,我不断得到一个时间限制错误,这意味着程序在找到解决方案之前先尝试了太多其他事情。我有没有办法加快速度?如果是这样,我可以在代码中改进什么


谢谢:)

差不多了,但是你必须使用
G
(我在这里把它命名为
Rest
):

例如:

travel(singapore,raglan,R).

R = go(singapore, auckland, 
       go(auckland, hamilton, 
          go(hamilton, raglan)))
travel(singapore,raglan,R).

R = go(singapore, auckland, plane, 
       go(auckland, hamilton, car, 
          go(hamilton, raglan, car)))
从这里开始,执行4是相当简单的,您只需添加
如何操作

%% Base cases
travel(X,Y, go(X,Y,car))   :- byCar(X,Y).
travel(X,Y, go(X,Y,plane)) :- byPlane(X,Y).
travel(X,Y, go(X,Y,train)) :- byTrain(X,Y).

%% Recursive cases
travel(X,Y, go(X,Z,Move,Rest)):-
    travel(X,Z, go(X,Z,Move)),
    travel(Z,Y, Rest).
例如:

travel(singapore,raglan,R).

R = go(singapore, auckland, 
       go(auckland, hamilton, 
          go(hamilton, raglan)))
travel(singapore,raglan,R).

R = go(singapore, auckland, plane, 
       go(auckland, hamilton, car, 
          go(hamilton, raglan, car)))

在递归情况下,
G
用于什么?用于跟踪其他go(X,Y)行。在链接中可以看到,当我有这些规则和链接中的事实时,输入
travel(metz,losAngeles,X)
应该返回
X=go(valmont,metz,go(metz,paris,go(paris,losAngeles))
定义
travel(X,Y,go(X,Z,G))
会给你带来麻烦,因为你所有其他的
旅行
调用都涉及
go
两个参数,而不是三个参数。而
G
是一个单变量,所以它没有写出来的用途。