私は宿題の問題に取り組んでいます。私は0と1の数がbinaryLists/3に渡される0と1のすべてのユニークな順列を取得しようとしています。私は順列を得る一連の規則を持っていますが、順列/ 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