Permutaciones
Permutación de la lista L es una lista que contiene todos los elementos de la lista L en algún orden .
Codigo:
perm(List,[H|Perm]) :- delete(H,List,Rest),perm(Rest,Perm).
perm([],[]).
delete(X,[X|T],T).
delete(X,[H|T],[H|NT]) :- delete(X,T,NT).
Combinaciones
La combinación es un subconjunto arbitrario del conjunto que contiene determinado número de elementos. El orden de los elementos es irrelevante.
Codigo:
comb(N,[X|T],[X|Comb]) :- N > 0, N1 is N - 1, comb(N1,T,Comb).
comb(N,[_|T],Comb) :- N > 0, comb(N,T,Comb).
Es posible programar el generador de combinaciones sin aritmética . El siguiente procedimiento comb2 asume la lista con N variables libres como su segundo argumento y se une estas variables. Por lo tanto, utilizan ? -comb2 ( [ 1,2,3,4 ] , [X , Y] ) para generar combinaciones con dos elementos.
Codigo:
comb2([X|T],[X|Comb]):-comb2(T,Comb).
comb2([_|T],[X|Comb]):-comb2(T,[X|Comb]).
Combinaciones con Repetición
Este tipo de combinación puede contener un elemento más veces. Por lo tanto , no es un conjunto, es un multi-conjunto.
Codigo:
comb_rep(0,_,[]).
comb_rep(N,[X|T],[X|RComb]):-N>0,N1 is N-1,comb_rep(N1,[X|T],RComb).
comb_rep(N,[_|T],RComb):-N>0,comb_rep(N,T,RComb).
Variaciones
La variación es un subconjunto dado con número de elementos. El orden de los elementos en la variación es significativa.
comb_rep(N,[X|T],[X|RComb]):-N>0,N1 is N-1,comb_rep(N1,[X|T],RComb).
comb_rep(N,[_|T],RComb):-N>0,comb_rep(N,T,RComb).
Variaciones
La variación es un subconjunto dado con número de elementos. El orden de los elementos en la variación es significativa.
Codigo:
varia(0,_,[]).
varia(N,L,[H|Varia]):-N>0,N1 is N-1,delete(H,L,Rest),varia(N1,Rest,Varia).
Variaciones con repetición
Una vez más, este tipo de variación puede contener elementos repetidos .
Codigo:
varia_rep(0,_,[]).
varia_rep(N,L,[H|RVaria]):-N>0,N1 is N-1,delete(H,L,_),varia_rep(N1,L,RVaria).
varia(N,L,[H|Varia]):-N>0,N1 is N-1,delete(H,L,Rest),varia(N1,Rest,Varia).
Variaciones con repetición
Una vez más, este tipo de variación puede contener elementos repetidos .
Codigo:
varia_rep(N,L,[H|RVaria]):-N>0,N1 is N-1,delete(H,L,_),varia_rep(N1,L,RVaria).