1%%% Copyright (C) 2009 Enrique Marcote, Miguel Rodriguez 2%%% All rights reserved. 3%%% 4%%% Redistribution and use in source and binary forms, with or without 5%%% modification, are permitted provided that the following conditions are met: 6%%% 7%%% o Redistributions of source code must retain the above copyright notice, 8%%% this list of conditions and the following disclaimer. 9%%% 10%%% o Redistributions in binary form must reproduce the above copyright notice, 11%%% this list of conditions and the following disclaimer in the documentation 12%%% and/or other materials provided with the distribution. 13%%% 14%%% o Neither the name of ERLANG TRAINING AND CONSULTING nor the names of its 15%%% contributors may be used to endorse or promote products derived from this 16%%% software without specific prior written permission. 17%%% 18%%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19%%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20%%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21%%% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22%%% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23%%% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24%%% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25%%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26%%% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27%%% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28%%% POSSIBILITY OF SUCH DAMAGE. 29-module(cl_stats). 30 31%%% EXTERNAL EXPORTS 32-export([combinations/2]). 33 34%%%----------------------------------------------------------------------------- 35%%% EXTERNAL EXPORTS 36%%%----------------------------------------------------------------------------- 37combinations(M, N) when (M >= 0), (N >= 0), (M >= N) -> 38 div_factorial(M, N) div factorial(M - N). 39 40%%%----------------------------------------------------------------------------- 41%%% INTERNAL FUNCTIONS 42%%%----------------------------------------------------------------------------- 43factorial(0) -> 44 1; 45factorial(N) when N > 0 -> 46 N * factorial(N - 1). 47 48 49div_factorial(M, N) when N > M -> 50 0; 51div_factorial(M, M) -> 52 1; 53div_factorial(M, N) -> 54 M * div_factorial(M - 1, N). 55