当我找到一条路线时 Prolog 中出现蠕变错误
creep error in Prolog when I find a route
我正在学习 Prolog,但在尝试查找路径时出现蠕变错误。
我认为我所做的是递归,因为这是在没有直线路径时找到路线的方法。
代码如下:
route(london,paris).
route(paris,rome).
route(rome,spain).
route(london,berlin).
route(berlin,praga).
route(london,dublin).
route(dublin,berlin).
path(X,Y,[X,Y]):- straight(X,Y).
path(X,Z,[X | other]):- straight(X,Y), path(Y,Z,other).
当我尝试查找时,假设是从伦敦到罗马的路线
path(london,rome,Store).
我收到这个错误:
Exception: (8) straight(london, rome) ? creep
Exception: (7) path(london, rome, _G4705) ? creep
我做错了什么?
我应该定义其他东西吗?
提前致谢!
你的判断几乎是正确的。您只需要将列表的尾部写为变量 Other
而不是原子 other
然后使用您的事实 route/2 进行直接连接:
path(X,Y,[X,Y]) :-
route(X,Y).
path(X,Z,[X | Other]) :-
route(X,Y),
path(Y,Z,Other).
现在您的查询有效:
?- path(london,rome,S).
S = [london,paris,rome] ? ;
no
我正在学习 Prolog,但在尝试查找路径时出现蠕变错误。 我认为我所做的是递归,因为这是在没有直线路径时找到路线的方法。
代码如下:
route(london,paris).
route(paris,rome).
route(rome,spain).
route(london,berlin).
route(berlin,praga).
route(london,dublin).
route(dublin,berlin).
path(X,Y,[X,Y]):- straight(X,Y).
path(X,Z,[X | other]):- straight(X,Y), path(Y,Z,other).
当我尝试查找时,假设是从伦敦到罗马的路线
path(london,rome,Store).
我收到这个错误:
Exception: (8) straight(london, rome) ? creep
Exception: (7) path(london, rome, _G4705) ? creep
我做错了什么? 我应该定义其他东西吗?
提前致谢!
你的判断几乎是正确的。您只需要将列表的尾部写为变量 Other
而不是原子 other
然后使用您的事实 route/2 进行直接连接:
path(X,Y,[X,Y]) :-
route(X,Y).
path(X,Z,[X | Other]) :-
route(X,Y),
path(Y,Z,Other).
现在您的查询有效:
?- path(london,rome,S).
S = [london,paris,rome] ? ;
no