PROLOG all different
我对PROLOG有一个很奇怪的问题。我以前用过,但是已经有一段时间了,我很生rust。我有一个变量列表,我需要确保它们都不相同。
我尝试过:
use_module(library(bounds)).
all_different(A, B, C, D, 6, 8).
但是,当我尝试此操作时,出现一条错误消息,提示all_different / 6未定义。
我该如何解决这个问题?我可以为此直接调用任何库函数吗?
我非常困惑,不胜感激。
预先感谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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. |
1 | all_different([A,B,C,D,6,8]). |
我相信只有一个列表可以传递给all_different。
我想> / 2和 2可能对all_different / 1应用于列表中的var的属性一无所知。在SWI-Prolog中,谓词由库(clpfd)提供,并且在该库中的其他谓词中有# 2。
1 2 3 4 5 6 7 | ?- 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会在应用的约束范围内产生所有可行的值。
Eclipse Prolog的" ic"约束库提供谓词alldifferent / 1,该谓词将变量列表作为参数,例如