我在城市之间有联系,比如
connection(London,Sziget).
connection(Sziget,Kairo).
所以我想创建一个谓词来查找两个城市之间是否存在可能的路线,甚至首先通过其他城市。
Input example: route(London,Kairo).
result: true
到目前为止,我已经创建了这个有效的递归代码。
route(W,Z):-connection(W,Z).
route(W,Z):-connection(W,Y),route(Y,Z).
但是如果两个城市之间的费用是100,而另外每个城市的费用是50,那么我还想计算路线的总费用。
Input example: route(London,Kairo).
result: true 150
任何帮助表示感谢。
答案 0 :(得分:0)
听起来你的成本是: 每个中间城市100 + 50?
如果是这种情况,你需要像
这样的东西route(W, Z, 100) :- connection(W, Z).
route(W, Z, Cost) :- connection(W, Y), route(Y, Z, Cost2), Cost is Cost2+50.
一旦找到直接链接,这将评估为100,或者每次必须通过中间人时加上50。
在这种情况下,您的输入将是
route(London, Kairo, Cost).
结果将是
Cost = 150
这意味着找到了一条路线。如果你真的需要'真实'部分,那将会有点棘手。