Ich schrieb ein Prolog-Programm, das alle möglichen Positionen von Elementen in einer zweidimensionalen Tabelle generiert. Die Anzahl der Elemente und die Tabellengröße sind angegeben.Prolog, entfernen sich wiederholende Ergebnisse in der Generation
My-Code ist:
geni(Min, Min, Max) :- Min =< Max.
geni(Min, X, Max) :- Max >= Min, MinInc is Min+1, geni(MinInc, X, Max).
generate(_, 0, []) :- !.
generate(TSize, N, [X|Tail]) :- NDec is N-1, generate(TSize,NDec, Tail),
X=k(X1,Y1), geni(1,X1,TSize), geni(1,Y1,TSize),
not(member(X, Tail)).
(TSize
es die Größe der Tabelle ist, N
die Anzahl der Elemente ist, und die letzte ist das Ergebnis) Predicate geni
Nummer X
in [A;B]
Intervall erzeugt.
Beispiel (2 Elemente in 2x2-Tabelle):
?- generate(2, 2, R).
R = [k(1, 1), k(1, 2)] ;
R = [k(1, 1), k(2, 1)] ;
R = [k(1, 1), k(2, 2)] ;
R = [k(1, 2), k(1, 1)] ;
R = [k(1, 2), k(2, 1)] ;
R = [k(1, 2), k(2, 2)] ;
R = [k(2, 1), k(1, 1)] ;
R = [k(2, 1), k(1, 2)] ;
R = [k(2, 1), k(2, 2)] ;
R = [k(2, 2), k(1, 1)] ;
R = [k(2, 2), k(1, 2)] ;
R = [k(2, 2), k(2, 1)] ;
false.
My Tabelle Schachbrett ist und Elemente sind Ritter. In diesem Fall sind alle Elemente gleich, aber mein Programm "denkt", dass sie verschieden sind. Wie vermeidet man gleiche Ergebnisse? Wie folgt aus:
R = [k(1, 1), k(1, 2)] ;
R = [k(1, 2), k(1, 1)] ;