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