このディレクトリの索引
#  WinXP HomeでBorland C++ Compiler 5.5 
#  ・1からnまでの整数1個ずつで構成される全部でn個の要素から、
#  r個の要素を重複なく取り出した場合の組み合わせを全て昇順で並べたものの中で、
#  具体的な組み合わせと具体的な序列が何番目かを相互に返すプログラム。 
#  例 43C6なら、序数5054214は組み合わせ11,14,17,18,34,36 
#  例 43C6なら、組み合わせ13,28,29,37,38,41は5498643 
#  コマンドはncr.exe [n],[r] [co][ra] x.txtの様な感じで

'1からnまでの整数1個ずつで構成される全部でn個の要素から、
r個の要素を重複なく取り出した場合の組み合わせを全て昇順で並べたものの中で、
具体的な組み合わせと具体的な序列が何番目かを相互に返す'(_n,_r,_序数,_具体的な組合せ) :-
        findall(M,between(1,_n,M),L),
        findall(_組合わせ,組合せ(L,_r,_組合わせ),_組合わせならび),
        nth1(_序数,_組合わせならび,_具体的な組合わせ).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

組合せ(L,1,[A]) :-
        member(A,L).
組合せ([A|R1],N,[A|R3]) :-
        N > 1,
        M is N - 1,
        組合せ(R1,M,R3).
組合せ([_|R1],N,L) :-
        N > 1,
        組合せ(R1,N,L).