, . , . Prolog , :
distribution([], [], []).
distribution([C-Ps|CPs], Rs0, [C-As|CAs]) :-
allocation(Ps, As, Rs0, Rs1),
As = [_|_],
distribution(CPs, Rs1, CAs).
allocation(_, [], Rs, Rs).
allocation(Ps0, [A|As], Rs0, Rs) :-
select(A, Ps0, Ps1),
select(A, Rs0, Rs1),
allocation(Ps1, As, Rs1, Rs).
distribution/3 Consumer-Preferences, - . Consumer-Allocated resources. SWI-Prolog :
?- distribution([a-[x,w],b-[x,y,v],c-[x,z],d-[z]], [x,w,y,v,z], Ds).
Ds = [a-[w], b-[y, v], c-[x], d-[z]] ;
Ds = [a-[w], b-[v, y], c-[x], d-[z]] ;
false.
. : ( , , , allocation/4, - - , As ), , , () , false.