Prolog 序言:城市之间的距离

Prolog 序言:城市之间的距离,prolog,distance,Prolog,Distance,我不熟悉序言。我正试图制作一个简单的程序,用递归结构计算城市之间的距离。当我试图找出没有直接连接的城市之间的总距离(例如伦敦到悉尼)时,就会出现问题 您可以按如下方式修改上一条规则: connected(X,Y,Distance):- distance(X,Z,Distance1), distance(Z,Y,Distance2), SumDistance is Distance1+Dista

我不熟悉序言。我正试图制作一个简单的程序,用递归结构计算城市之间的距离。当我试图找出没有直接连接的城市之间的总距离(例如伦敦到悉尼)时,就会出现问题


您可以按如下方式修改上一条规则:

connected(X,Y,Distance):- distance(X,Z,Distance1),
                          distance(Z,Y,Distance2),
                          SumDistance is Distance1+Distance2,
                          write(SumDistance).
以下是我的结果:

1 ?- connected(london,sydney,X).
12.2
true .
路线是伦敦->巴拿马->悉尼。我使用了
trace.
来查看它的工作原理:

 2 ?- trace.
true.

[trace] 2 ?- connected(london,sydney,X)
   ....
   Redo: (7) distance(london, _G1945, _G1946) ? creep
   Exit: (7) distance(london, panama, 4.5) ? creep
   Call: (7) distance(panama, sydney, _G1950) ? creep
   Exit: (7) distance(panama, sydney, 7.7) ? creep
   Call: (7) _G1955 is 4.5+7.7 ? creep
   Exit: (7) 12.2 is 4.5+7.7 ? creep
   Call: (7) write(12.2) ? creep
12.2
   Exit: (7) write(12.2) ? creep
   Exit: (6) connected(london, sydney, _G1871) ? creep

(我删除了一些跟踪,因为它太长了)。

似乎解决方案有问题。对于
connected(伦敦,巴拿马,X),我得到的是5.1而不是4.5。
同样,对于所有其他单谓词执行,答案是错误的。
 2 ?- trace.
true.

[trace] 2 ?- connected(london,sydney,X)
   ....
   Redo: (7) distance(london, _G1945, _G1946) ? creep
   Exit: (7) distance(london, panama, 4.5) ? creep
   Call: (7) distance(panama, sydney, _G1950) ? creep
   Exit: (7) distance(panama, sydney, 7.7) ? creep
   Call: (7) _G1955 is 4.5+7.7 ? creep
   Exit: (7) 12.2 is 4.5+7.7 ? creep
   Call: (7) write(12.2) ? creep
12.2
   Exit: (7) write(12.2) ? creep
   Exit: (6) connected(london, sydney, _G1871) ? creep