gpt4 book ai didi

prolog - 在序言中查找图形节点之间的距离

转载 作者:行者123 更新时间:2023-12-04 00:47:23 24 4
gpt4 key购买 nike

我在 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 个:查看第一个元素和第二个元素是否连接,递归地查看下一个元素是否已连接。我已经为头和尾定义了 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 领域的新手,我仍在努力理解语言语义。请提出解决此问题的有效方法。

最佳答案

dist([_], 0).            % path of length 0 has distance 0
dist([A, B | T], L) :-
connected(A, B, L1), % A and B are connected directly, the distance is L1
dist([B|T], L2), % the distance between B and the last element is L2
L is L1 + L2.

关于prolog - 在序言中查找图形节点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com