如何在Prolog回溯期间获取值列表?
假设我有以下代码:如何在Prolog回溯期间获取值列表?,prolog,backtracking,Prolog,Backtracking,假设我有以下代码: 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]). (由于处理成员的方式,以上部分实
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]).
(由于处理成员的方式,以上部分实际上不起作用。请提供任何建议?您可以用它来创建一个满足目标的垂直列表,“Vs是N,是V的边。”
您可以使用创建一个满足目标的垂直度列表,“Vs是V的边的所有N。”
阅读您最喜欢的Prolog实现手册中的findall
、bagof
和setof
,或如中的“11.2收集解决方案”一节
(不幸的是,很难直接链接到这些资源。)阅读您最喜欢的Prolog实现手册中的findall
、bagof
和setof
,或中的“11.2收集解决方案”部分
(不幸的是,很难直接链接到这些资源。)
neighbors(V, Vs) :- bagof(N, edge(V, N), Vs).
neighbors(a, Vs). % Vs = [b, c, d].