我正在處理作業問題。我試圖獲得所有0和1的唯一排列,其中0和1的數量傳遞給binaryLists/3。我有一套將會得到排列的規則,但是我得到大量的重複項作爲排列/ 2將每個0和1視爲唯一。我覺得我需要在某個地方進行裁減,但我不太瞭解裁員情況,我不知道如何思考這個問題。我的代碼如下:在gprolog中查找列表的唯一排列
binaryLists(0, 0, R).
binaryLists(Z, O, R) :-
Z >= 0, O >= 0,
generateZero(Z, Lz),
generateOne(O, Lo),
append(Lz, Lo, Tmp),
permutation(Tmp, R).
generateZero(0, R) :-
R = [].
generateZero(Z, R) :-
Z > 0,
Y is Z - 1,
generateZero(Y, Tmp),
append(Tmp, [0], R).
generateOne(0, R) :-
R = [].
generateOne(Z, R) :-
Z > 0,
Y is Z - 1,
generateOne(Y, Tmp),
append(Tmp, [1], R).
這樣做的結果將給出相同列表的許多重複的(例如,[1,0,0,0])。
這解決了我的問題,謝謝你的幫助。我仍然無法將自己置於正確的思維模式之中,所以我很欣賞演練。 – Demonox