Frage
habe ich ein sehr seltsames Problem mit PROLOG. Ich habe es vorher benutzt, aber es ist eine Weile her und ich bin verrostet. Ich habe eine Liste von Variablen, und ich brauche, dass keiner von ihnen gleich ist zu gewährleisten.
Ich habe versucht:
use_module(library(bounds)).
all_different(A, B, C, D, 6, 8).
Allerdings, wenn ich dies versuchen, ich einen Fehler erhalten, dass all_different / 6 nicht definiert ist.
Wie kann ich mich über dieses Problem zu lösen? Gibt es eine Bibliotheksfunktion, dass ich direkt für diese anrufen kann?
Ich bin sehr fest und würde schätzen jede Hilfe.
Vielen Dank im Voraus.
solve([
[A, 6, 1],
[B, 5, C, 2, D, E, F, G, 6],
[6, H, I, 5, J, K, 2, L, 3],
[5, M, 6, N, O, 4, P, Q, 5],
[4, R, S, T, U, 6, V, 4, W],
[2, 0, X]
]) :-
all_different([A,6,1,2,D,E]),
all_different([B,5,C,6,H,I]),
all_different([C,2,D,I,5,J]),
all_different([D,E,F,J,K,2]),
all_different([F,G,6,2,L,3]),
all_different([H,I,5,M,6,N]),
all_different([5,J,K,N,O,4]),
all_different([K,2,L,4,P,Q]),
all_different([5,M,6,4,R,S]),
all_different([6,N,O,S,T,U]),
all_different([O,4,P,U,6,V]),
all_different([P,Q,5,V,4,W]),
all_different([T,U,6,2,1,X]),
A<7, A>0, B<7, B>0, C<7, C>0, D<7, D>0,
E<7, E>0, F<7, F>0, G<7, G>0, H<7, H>0,
I<7, I>0, J<7, J>0, K<7, K>0, L<7, L>0,
M<7, M>0, N<7, N>0, O<7, O>0, P<7, P>0,
Q<7, Q>0, R<7, R>0, S<7, S>0, T<7, T>0,
U<7, U>0, V<7, V>0, W<7, W>0, X<7, X>0.
Lösung
all_different([A,B,C,D,6,8]).
Ich glaube, dass nur eine Liste kann in all_different übergeben werden.
Andere Tipps
Ich denke, das> / 2 und 2 kann nichts über Attribute wissen, dass all_different / 1 angewendet Vars in der Liste. In SWI-Prolog, dass Prädikat wird von Bibliothek (clpfd) und unter anderen Prädikaten in dieser Bibliothek vorausgesetzt, es ist # 2.
?- all_different([X,Y]), 0 #< X, X #< 3, 1 #< Y, Y #< 4, indomain(X), indomain(Y). X = 1, Y = 2 ; X = 1, Y = 3 ; X = 2, Y = 3.
P. S. indomain / 1 aus derselben Bibliothek Ausbeuten alle denkbaren Werte innerhalb Applied Einschränkungen.
Die „ic“ Einschränkung Bibliothek von Eclipse Prolog bietet das Prädikat alldifferent / 1, das eine Liste von Variablen als Argument, zum Beispiel alldifferent([X,Y])
und berechnet, was Sie suchen.