说我有以下代码:
edge(a, b).
edge(a, c).
edge(a, d).
现在我做的时候
neighbors(V, N) :- edge(V, N), writeln(N), fail.
我可以获得打印到控制台的邻居列表。但是我如何才能将其作为结果列表?像
这样的东西neighbors(V, Vs) :-
edge(V, N),
not(member(N, Vs)),
neighbors(V, [N|Vs]).
(由于处理member
的方式,上面的内容确实不起作用。有什么建议吗?
答案 0 :(得分:3)
在您最喜欢的Prolog实施手册中了解findall
,bagof
和setof
,或者Learn Prolog Now!中的“11.2收集解决方案”部分
(不幸的是,很难直接链接到这些资源。)
答案 1 :(得分:1)
您可以使用bagof/3
创建满足目标的顶点列表,“Vs是V的边缘的所有N.”
neighbors(V, Vs) :- bagof(N, edge(V, N), Vs).
neighbors(a, Vs). % Vs = [b, c, d].