下面是對類似問題的解決方案。對於每個變量而不是列表中包含條目[V,term]
的答案列表,查詢goal_answers(Goal, Answerp)
找到一對Vars-Terms
。
goal_answerp(Goal, Answerp) :-
term_variables(Goal, Vars),
findall(Vars, Goal, Substs),
Answerp = Vars-Substs.
?- goal_answerp(a(X,1), Ms).
Ms = [X]-[[0],[1]].
?- goal_answerp(a(X,Y), Ms).
Ms = [X,Y]-[[0,1],[1,1]].
[編輯]爲了得到答案放回原來的格式使用library(lambda)
:
?- goal_answerp(a(X,1), Vs-Dss),
maplist(Vs+\Ds^VDs^maplist(\V^D^[V,D]^true,Vs,Ds,VDs),Dss,VDss).
Vs = [X],
Dss = [[0],[1]],
VDss = [[[X,0]],[[X,1]]].
?- goal_answerp(a(X,Y), Vs-Dss),
maplist(Vs+\Ds^VDs^maplist(\V^D^[V,D]^true,Vs,Ds,VDs),Dss,VDss).
Vs = [X,Y],
Dss = [[0,1],[1,1]],
VDss = [[[X,0],[Y,1]],[[X,1],[Y,1]]].
根據你的數據庫的事實,我認爲第二個例子應該是地圖= [[[X, 0],[Y,1]],[[X,1],[Y,1]]] – gusbro
你說得對,我馬上解決。對不起,我還沒有試圖解決這個問題。 – ailnlv