bagof/3據我理解謂詞SETOF/3和bagof/3可用於產生一個問題的解決方案的列表。 (Link to gprolog manual)。問題的Prolog中
正如預期的那樣,以下面的查詢的解決方案是a,b和c。
?- nth(_, [a,b,c], X).
X = a ? ;
X = b ? ;
X = c ? ;
yes
現在我試試這個:
?- setof(X, nth(_, [a,b,c], X), ListOfSolutions).
ListOfSolutions = [a] ? ;
ListOfSolutions = [b] ? ;
ListOfSolutions = [c]
yes
的解決方案應該是[A,B,C]在我看來。我究竟做錯了什麼?
我使用gprolog 1.4.0適用於Mac OS。
編輯:解
我真正需要的是(^)/ 2的操作者,但是這裏給出的答案是完全正確的,非常感謝你的幫助。如果任何人有類似的問題,這裏是我目前的代碼來從三維網格中選擇單元格。
% selectFLR(?Grid, ?ClassId, ?TDayIdD, ?HourId, -ListOfFLR)
% ---------------------------------------------------------
selectFLR(Grid, ClassId, DayId, HourId, ListOfFLR) :-
bagof(FLR, ClassId^DayId^HourId^selectSingleFLR(Grid, ClassId, DayId, HourId, FLR), ListOfFLR).
selectSingleFLR(Grid, ClassId, DayId, HourId, FLR) :-
nth(ClassId, Grid, Class),
nth(DayId, Class, Day),
nth(HourId, Day, FLR).
,因爲它產生時,它發現一個匿名的一個新的變量,我不能使用的findall/3。我想對它們應用一些有限的域約束,所以這對我來說是一個問題。有沒有一種方法可以使用bagof來生成一系列解決方案? – Thomas 2011-06-11 14:20:16