Prolog all different

I have a very strange problem with PROLOG. I used it before, but it was time, and I'm rusty. I have a list of variables, and I have to make sure that none of them are the same.

I tried:

use_module(library(bounds)). all_different(A, B, C, D, 6, 8).

However, when I try to do this, I get an error message saying that all_different / 6 is undefined.

How can I solve this problem? Is there any library function that I can call for this?

I am VERY stuck and really appreciate any help.

Thanks in advance.

 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. 
+6
prolog clpfd
source share
3 answers
 all_different([A,B,C,D,6,8]). 

I believe that only List can be passed in all_different.

+9
source share

I assume that> / 2 and </ 2 do not know anything about the attributes that all_different / 1 applied to vars in the list. In SWI-Prolog, this predicate is provided by the library (clpfd) and among other predicates in this library: # </ 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. 

PS indomain / 1 from the same library gives all valid values ​​within the applicable limits.

+2
source share

The Eclipse Prolog constraint library ic contains the predicate alldifferent / 1, which takes a list of variables as its argument, for example, alldifferent([X,Y]) , and computes what you are looking for.

+1
source share

All Articles