私が理解している限り、述語setof/3とbagof/3を使用して、問題の解決策のリストを生成できます。(gprologマニュアルへのリンク)。
予想どおり、次のクエリの解決策は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]でなければなりませんでした。私は何が間違っているのですか?
MacOS用にgprolog1.4.0を使用しています。
編集:解決策
本当に必要だったのは(^)/ 2演算子でしたが、ここでの答えは完全に正しかったので、よろしくお願いします。誰かが同様の問題を抱えている場合は、3次元グリッドからセルを選択するための現在のコードがここにあります。
% 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).