簡體   English   中英

統一序言中的目標列表

[英]Unifying a list of goals in 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]]]

(向您展示這一點我感到非常難過,我敢肯定,您仍然會誤解某些觀點。事實上,學習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]]].

無法直接恢復變量名稱。 您必須自己解析程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM