Recursion Prolog在递归和LPN练习方面有问题
我需要做第3.4节的LPN实用3:编写一个旅行/3规则,用它可以搜索路线。() 我目前有以下解决方案: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
%% 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
是一个单变量,所以它没有写出来的用途。