2010-03-21 42 views
6

Tôi có một vấn đề rất lạ với PROLOG. Tôi đã sử dụng nó trước đây, nhưng nó đã được một thời gian và tôi đang gỉ. Tôi có một danh sách các biến và tôi cần đảm bảo rằng không có biến nào giống nhau.PROLOG tất cả khác nhau

Tôi đã thử:

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

Tuy nhiên, khi tôi cố gắng này, tôi nhận được một thông báo lỗi rằng all_different/6 là không xác định.

Tôi làm cách nào để giải quyết vấn đề này? Có chức năng thư viện nào mà tôi có thể gọi trực tiếp cho việc này không?

Tôi rất mắc kẹt và sẽ đánh giá cao mọi trợ giúp.

Xin cảm ơn trước.

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. 
+0

Xin lỗi mã trông hơi lộn xộn, nhưng tôi không thể tìm thấy cách để định dạng đúng cách – inspectorG4dget

Trả lời

9
all_different([A,B,C,D,6,8]). 

Tôi tin rằng chỉ có một danh sách có thể được thông qua vào all_different.

+0

Tôi đã thử và nhận được lỗi này: Quy trình chưa xác định: all_different/1. Bất kỳ suy nghĩ nào? – inspectorG4dget

+1

Tôi giả sử bạn vẫn có điều này:: - use_module (thư viện (giới hạn)). –

+0

Tôi vẫn có use_module (thư viện (bounds)) – inspectorG4dget

2

Tôi đoán rằng >/2 và </2 có thể không biết gì về các thuộc tính all_different/1 được áp dụng cho các vars trong danh sách. Trong SWI-Prolog rằng biến vị ngữ được cung cấp bởi thư viện (clpfd) và trong số các biến vị ngữ khác trong thư viện đó có # </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 từ cùng một thư viện mang lại tất cả các giá trị khả thi trong các ràng buộc áp dụng.

1

Thư viện hạn chế "ic" của Eclipse Prolog cung cấp biến vị ngữ alldifferent/1, có danh sách các biến làm đối số của nó, ví dụ: alldifferent([X,Y]) và tính toán những gì bạn đang tìm kiếm.

Các vấn đề liên quan