0

我将如何在 prolog 中编写一个规则,允许它打印两个节点之间的边缘成本/权重列表?

我的边缘事实输入为

edge(X,Y,Weight).
edge(Y,X,Weight).
4

2 回答 2

0

You can define a path predicate like this one :

path(Node1,Node2,W,Path_Weight) :- edge(Node1,Node2,Tmp), Path_Weight = W+Tmp.
path(Node1,Node2,W,Path_Weight) :- edge(Node1,NextNode,A), path(NextNode,Node2,A+W,Path_Weight).

This should provide you the solution in Path_Weight variable. Hope it helps.

于 2013-01-14T13:33:12.297 回答
0

简而言之,您需要一个规则,该规则将搜索所有edge事实以查找匹配项X to Y并打印与之相关的重量成本。

如果您确定每个节点都有一个反向事实(这实际上意味着对于每个事实,您的代码中都edge(X,Y,Edge_Weight)应该存在一个事实edge(Y,X,Edge_Weight))并且假设这两条边之间的权重与您提供的不同,那么这里是一个代码这将打印 之间所有可能的边缘的重量成本X and Y

  find_edge_weight(X,Y, [D]):-
                 edge(X, Y, EdgeCost), /* Checking for an existing edge */
                 find_edge_weight(X,Y,[EdgeCost|D]), /* Adding weight to the list */
                 printList([D]). /* Printing list */

  /* A rule used to print the list */
  printList([EdgeCost|D]):-
                 write_ln(EdgeCost),
                 printList(D). 
于 2013-01-13T13:52:33.573 回答