我有一个像这样表示的有向图:
arc(1, 2).
arc(1, 4).
arc(1, 5).
arc(3, 2).
arc(3, 7).
arc(4, 3).
arc(5, 6).
arc(6, 8).
arc(7, 6).
arc(9, 8).
我需要的是一个谓词,它将把我可以从特定节点转到的所有节点放在一个列表中。例如,对于节点 1,结果列表应该是L=[2,4,5]
因为从 1 我可以转到 2,4 和 5。它是如何完成的并不重要,重要的是结果,节点必须在列表中。我试图以几种方式做到这一点,但失败了。
我如何尝试这样做的一个例子:
road(X,L,L2):- arc(X,Y), not(belong(Y,L)), append(L,[Y],L2), road(X,L2,_).
road(X,L,L).
belong(Y,L)
是一个谓词,如果Y
在L
.
例如,当我运行road(1,[],L).
结果时L=[2]
,这是正常的,因为谓词写得不好。
当我尝试使用递归时,我不知道该放什么作为递归的正确停止,我希望你明白我想说的话。
我尝试了另一种使用失败的方法,但这也没有奏效,我现在不记得我是如何做到的。
我希望有人能快速提出解决方案:),在此先感谢。