このディレクトリの索引

組合せ(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).

単位節組合せ(_述語名/_アリティ,_選択項位置リスト,_組合せ数,X) :-
        length(_引数ならび,_アリティ),
        P =.. [_述語名|_引数ならび],
        findall(U,(
                    call(P),
                    項の選択(_選択項位置リスト,_引数ならび,U)),
                L2),
        組合せ(L2,_組合せ数,X).

項の選択([],_引数ならび,[]).
項の選択([_nth1|R1],_引数ならび,[X|R3]).
        nth1(_nth1,_引数ならび,X),
        項の選択(R1,_引数ならび,R3).

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


組合せ(L,1,[A]) :-
member(A,L).
組合せ([A|R1],N,[A|R2]) :-
'Nを1減らして残り要素の組合せ'(R1,N,R2).
組合せ([_|R1],N,R2) :-
'Nはそのままで残り要素の組合せ'(R1,N,R2).


'Nを1減らして残り要素の組合せ'(R1,N,R2) :-
N > 1,
succ(N_1,N),
組合せ(R1,N_1,R2).


'Nはそのままで残り要素の組合せ'(R1,N,R2) :-
N > 1,
組合せ(R1,N,R2).