このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1244449887/842
# [1] C言語
# [2]1〜5の数字の組み合わせをを2次元配列index[][]に格納し、表示しなさい。

t268(X) :- 組合せ([1,2,3,4,5],2,X).

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

% *** user: '重複組合せ' / 3 ***
'重複組合せ'(X,1,[A]) :-
    member(A,X) .
'重複組合せ'([A|Y],N,[A|X]) :-
    N > 1,
    M is N - 1,
    '重複組合せ'([A|Y],M,X) .
'重複組合せ'([_|Y],N,A) :-
    N > 1,
    '重複組合せ'(Y,N,A) .

% *** user: '順列' / 3 ***
'順列'(Y,0,[]).
'順列'(Y,N,[A|X]) :-
    del(Z = Y - A),
    M is N - 1,
    '順列'(Z,M,X) .

% *** user: del / 3 ***
del(A,[A|X],X).
del(A,[B|X],[B|Y]) :-
    del(A,X,Y) .

% *** user: del / 1 ***
del(X = [A|X] - A).
del([B|Y] = [B|X] - A) :-
    del(Y = X - A) .

% *** user: '重複順列' / 3 ***
'重複順列'(L,N,X) :-
    length(X,N),
    '重複順列'(L,X) .

% *** user: '重複順列' / 2 ***
'重複順列'(L,[]).
'重複順列'(L,[A|R]) :-
    member(A,L),
    '重複順列'(L,R) .