그것은 당신의 코드 것으로 보인다 :
은 아마 당신이 할하려는 것은
이
path(Node1, Node2, Distance):- edge(Node1, Node2, Dist), Distance is Dist.
편집
입력 및 출력 변수를 혼합하지 않고 같은 일을 시도하다 어쨌든 네가하고 싶은 일을하지 않을거야. 그래프에서 노드 사이의 거리를 계산하기로되어 있습니까? 당신이이 코드 조각으로 시작보다 (테스트하지) :
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)
을 이제 당신이 변수 거리에서 a와 b 사이 당신의 거리를 줄 것이다 path(a,b,Distance)
같은 프롤로그 엔진을 요청하는 경우.
여기에 어떤 일이 일어나는지
조금 비공식적 설명 : 변수는에 '초기화'됩니다 edge(Node1, Node2, Dist), !.
(0)와 Node1
및 Node2
사이 프롤로그 평가됩니다 동안 추가됩니다 다른 숫자보다 거리로 초기화됩니다 (1)과 (2)보다.
그러나 논리 프로그래밍은 '일반적인'절차 프로그래밍과 다르므로 조금 다른 생각을해야합니다. 좋은 결과 내길 바랄 게. Btw. SWI 프롤로그는 훌륭한 디버거를 가지고있어, 술어가 평가 될 때 일어나는 일을 이해하는 데 도움이됩니다.
그게 효과가 있어요. 고맙습니다. –