prolog显示重量

时间:2013-01-13 12:16:14

标签: prolog

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

我的边缘事实输入为

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

2 个答案:

答案 0 :(得分: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). 

答案 1 :(得分:0)

您可以定义类似这样的路径谓词:

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).

这应该为您提供Path_Weight变量的解决方案。 希望它有所帮助。