代码之家  ›  专栏  ›  技术社区  ›  inspectorG4dget

所有不同的序言

  •  6
  • inspectorG4dget  · 技术社区  · 14 年前

    我对Prolog有一个很奇怪的问题。我以前用过,但已经有一段时间了,我生锈了。我有一个变量列表,我需要确保它们都不相同。

    我尝试过:

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

    但是,当我尝试这个时,我会得到一个错误,说所有不同的/6都是未定义的。

    我该如何着手解决这个问题?有没有可以直接调用的库函数?

    我很困,非常感谢你的帮助。

    事先谢谢。

    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.
    
    3 回复  |  直到 12 年前
        1
  •  9
  •   Kevin Crowell    14 年前
    all_different([A,B,C,D,6,8]).
    

    我相信只有一个列表可以传递给所有不同的人。

        2
  •  2
  •   ony    14 年前

    我想>/2和</2可能不知道应用于列表中vars的所有不同/1的属性。在swi prolog中,该谓词由库(clpfd)提供,在该库中的其他谓词中有</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生成了应用约束内的所有可行值。

        3
  •  1
  •   Matthias F    14 年前

    eclipse prolog的“ic”约束库提供谓词alldifferent/1,它以变量列表作为参数,例如, alldifferent([X,Y]) 计算你要找的东西。