gpt4 book ai didi

图的 Prolog 连接边

转载 作者:行者123 更新时间:2023-12-01 11:40:10 25 4
gpt4 key购买 nike

我想做一个谓词来检查一个节点是否可以到达序言图中的另一个节点。例如 Connected(1,X,[[1,3],[3,4],[2,5]]) 第一个参数是我要启动的节点第二个是我要启动的节点想要到达,第三个是边缘列表。到目前为止,我已经设法做到了,但是当我尝试使用 findall/3 获取我到达的所有节点时,我遇到了一个无限循环。

有什么方法可以停止无限循环,还是我应该从头开始解决问题?

到目前为止,这是我的代码:

 match([X,Y],List):- member([X,Y], List).
match([X,Y],List):- member([Y,X], List).


go(X,Y,List):-match([X,Y],List).
go(X,Y,List):-match([X,Z],List),go(Z,Y,List).

goes(X,List,List2):-findall(Y,go(X,Y,List),List2).

我是 Prolog 的新手,我不知道自己做错了什么。

最佳答案

可能对您的代码进行更正

match([X,Y], List, Rest):- select([X,Y], List, Rest).
match([X,Y], List, Rest):- select([Y,X], List, Rest).

go(X,Y,List) :- match([X,Y],List,_).
go(X,Y,List) :- match([X,Z],List,Rest), go(Z,Y,Rest).

goes(X,List,List2) :- findall(Y, go(X,Y,List), List2).

现在匹配“消耗”一条边,然后避免无限循环

关于图的 Prolog 连接边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972224/

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