在 prolog 中查找图的节点之间的距离
我在 Prolog 中有一个由边和线表示的图。权重:
connected(a,b,2).
connected(b,e,1).
connected(b,l,5).
connected(b,g,2).
connected(c,s,2).
connected(d,a,2).
connected(d,k,4).
connected(d,l,7).
connected(e,m,2).
我需要编写一个谓词,它采用节点列表和权重列表。距离。
?- dist([a,b,e],X).
X=3
我试着写它,但它非常笨拙&没有给出预期的结果。
我的基本想法是: 如果它是一个包含 2 个元素的列表,则查看它们是否相连。 如果列表中的元素超过 2 个:查看第一个元素是否为第一个元素第二个元素已连接, 递归地查看下一个元素是否连接。 我为 head 和; 定义了 2 个辅助谓词。尾巴。
dist([A, B], X) :-
connected(A, B, X).
dist([A|B], Length) :-
connected(A, hd(B,H,N), X), % sees if A & next element in the list are connected
dist(tl(B,H,N), Length1), % recursive call with the list excluding element A
Length is X + Length1.
hd([H|T],H,Q).
tl([H|T],T,Q).
我对 Prolog 非常陌生,我仍在尝试理解语言语义。 请建议一种有效的方法来解决这个问题。
I have a graph in Prolog represented by the edges & weights:
connected(a,b,2).
connected(b,e,1).
connected(b,l,5).
connected(b,g,2).
connected(c,s,2).
connected(d,a,2).
connected(d,k,4).
connected(d,l,7).
connected(e,m,2).
I need to write a predicate which takes a list of nodes & distance.
?- dist([a,b,e],X).
X=3
I've tried to write it, but it is very clumsy & doesn't give the intended result.
The basic idea I have is:
If it is a list of 2 elements then see if they are connected.
If more then 2 elements in the list: see if the 1st element & 2nd element are connected,
recursively see if the next elements are connected.
I have defined 2 auxiliary predicates for head & tail.
dist([A, B], X) :-
connected(A, B, X).
dist([A|B], Length) :-
connected(A, hd(B,H,N), X), % sees if A & next element in the list are connected
dist(tl(B,H,N), Length1), % recursive call with the list excluding element A
Length is X + Length1.
hd([H|T],H,Q).
tl([H|T],T,Q).
I am very new to Prolog land and I am still trying to comprehend the language semantics.
Please suggest an efficient way to go about this problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)