% APRENDIZAJE AUTOMÁTICO (G. Pajares y J. M. de la Cruz, Eds.)
% Editorial: RA-MA
% Capítulo 12: Aprendizaje por Refuerzo
% Autores: Jose Antonio Martin H y Matilde Santos
function C = setprod(varargin)
% SETPROD product of multiple sets.
%
%   X = SETPROD(A,B,C,...) returns the cartesian product of the sets 
%   A,B,C, etc, where A,B,C, are numeric or character arrays.  
%
%   Example: A = [-1 -3 -5];   B = [10 11];   C = [0 1];
% 
%   X = SETPROD(A,B,C)
%   X =
% 
%     -5    10     0
%     -3    10     0
%     -1    10     0
%     -5    11     0
%     -3    11     0
%     -1    11     0
%     -5    10     1
%     -3    10     1
%     -1    10     1
%     -5    11     1
%     -3    11     1
%     -1    11     1

% Mukhtar Ullah
% mukhtar.ullah@informatic.uni-rostock.de
% September 20, 2004

args = varargin;

if any([cellfun('isclass',args,'cell') cellfun('isclass',args,'struct')])
    error(' SETPROD only supports numeric/character arrays ')
end

n = nargin;

[F{1:n}] = ndgrid(args{:});

for i=n:-1:1
    G(:,i) = F{i}(:);
end

C = unique(G , 'rows');