如何在prolog中编写规则,允许它打印两个节点之间的边缘成本/权重列表?
我的边缘事实输入为
edge(X,Y,Weight).
edge(Y,X,Weight).
答案 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变量的解决方案。 希望它有所帮助。