- member/2. member/2 , : (, member(X,[1,4,2,5])) , (, member(2,L)).
. , member(A,[1,2,3,4,5,6]). X 1, 2,..., 6.
, :
four([A,B,C,D]) :-
member(A,[1,2,3,4,5,6]),
member(B,[1,2,3,4,5,6]),
member(C,[1,2,3,4,5,6]),
member(D,[1,2,3,4,5,6]).
backtracing . , eBlements [1,2,3,4,5,6].
, , , [2,2,3,3], . A \= B , , A B. , , :
four([A,B,C,D]) :-
member(A,[1,2,3,4,5,6]),
member(B,[1,2,3,4,5,6]),
member(C,[1,2,3,4,5,6]),
member(D,[1,2,3,4,5,6]),
A \= B,
A \= C,
A \= D,
B \= C,
B \= D,
C \= D.
: , , , . , , A B , , C D, . , :
four([A,B,C,D]) :-
member(A,[1,2,3,4,5,6]),
member(B,[1,2,3,4,5,6]),
A \= B,
member(C,[1,2,3,4,5,6]),
A \= C,
B \= C,
member(D,[1,2,3,4,5,6]),
A \= D,
B \= D,
C \= D.
, : . , , - . , .
, , [1..n]. :
between(A,B,A) :-
A =< B.
between(A,B,C) :-
A < B,
A1 is A+1,
between(A1,B,C).
between(1,6,X)., X 1, 2, 3, 4, 5 6.
, :
distinct_n(A,B,N,L) :-
distinct_n(A,B,N,[],L).
distinct_n(_,_,0,_,[]).
distinct_n(A,B,N,Xs,[X|R]) :-
N > 0,
between(A,B,X),
\+ member(X,Xs),
N1 is N-1,
distinct_n(A,B,N1,[X|Xs],R).
, L N A B ( ), distinct_n(A,B,N,L)..
3- 1-4, :
?- distinct_n(1,4,3,L).
L = [1, 2, 3] ;
L = [1, 2, 4] ;
L = [1, 3, 2] ;
L = [1, 3, 4] ;
L = [1, 4, 2] ;
L = [1, 4, 3] ;
L = [2, 1, 3] ;
L = [2, 1, 4] ;
L = [2, 3, 1] ;
L = [2, 3, 4] ;
L = [2, 4, 1] ;
L = [2, 4, 3] ;
L = [3, 1, 2] ;
L = [3, 1, 4] ;
L = [3, 2, 1] ;
L = [3, 2, 4] ;
L = [3, 4, 1] ;
L = [3, 4, 2] ;
L = [4, 1, 2] ;
L = [4, 1, 3] ;
L = [4, 2, 1] ;
L = [4, 2, 3] ;
L = [4, 3, 1] ;
L = [4, 3, 2] ;
false.
, findall/3:
?- findall(L,distinct_n(1,4,3,L),LL).
LL = [[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]].
CLP (FD)
Prolog C onstraint L ogic P rogramming F inite D omains (clpfd). , :
:- use_module(library(clpfd)).
distinct_n(A,B,N,L) :-
length(L,N),
L ins A..B,
all_distinct(L),
label(L).
Se , L N. L A..B, all_distinct/1. , label/1, .