统一prolog中的目标列表

时间:2015-05-07 21:15:54

标签: prolog

我有一个目标列表,我希望在运行时统一,这样我就可以得到一个变量,值对的列表。我怎么能这样做?

示例

db.pl:

alpha(a).
bravo(b).
bravo(c).
gs([alpha(X), bravo(Y)]).

解释器:

?- [db].
?- gs(L), solve(L, Out).
L = [alpha(X), bravo(Y)].
Out = [[[X, a], [Y, b]], [[X, a], [Y, c]]]

1 个答案:

答案 0 :(得分:1)

(我觉得很难向你展示这一点,我很确定你仍然误解了某些问题。事实上,你学习setof/3call/N会好得多。但是,我们如何才能赢得代表......)

solve(L, Out) :-
   setof(Pairs, maplist(goal_pair,L,Pairs), Out).

goal_pair(G, [V,W]) :-
   arg(1, G, V),
   setof(V, G, Vs),
   member(W, Vs).

这将为您提供SWI

?- gs(L), solve(L, Out).
L = [alpha(_G1760), bravo(_G1765)],
Out = [[[_G1760, a], [_G1765, b]], [[_G1760, a], [_G1765, c]]].

无法直接恢复变量名称。你必须自己解析程序。