Кажется, что ваш код в любом случае не будет делать то, что вы хотите. Предполагается ли рассчитать расстояние между узлами в графе? Чем вы начинаете с этого куска кода (не проверено):
path(Node1, Node2, Dist):-edge(Node1, Node2, Dist), !. (0)
path(Node1, Node2, Dist):-
edge(Node1, NodeBetween, DistToBetween),
path(NodeBetween, Node2, DistFromBetween), (1)
Dist is DistToBetween + DistFromBetween. (2)
Теперь, когда вы спросите двигатель Prolog, например, path(a,b,Distance)
, он даст вам расстояние между a и b в переменной Distance.
Немного неофициальное описание того, что здесь происходит:
Переменная будет «инициализирована» в edge(Node1, Node2, Dist), !.
(0) и будет инициализирована на расстояние между Node1
и Node2
, после чего к ней будут добавлены другие числа, в то время как Prolog будет оценивать (1) и чем (2) ,
Однако логическое программирование отличается от «обычного» процедурного программирования, нужно думать немного иначе. Удачи с этим. Btw. В прологе SWI есть хороший отладчик, который может помочь понять, что происходит под капотом при оценке предиката.