このディレクトリの索引
#  [1,2,3,4,5]というリストを受け取って、
#  [[],[1],[2],[3],[4],[5],[1,2],[2,3],[3,4],[4,5],[5,1],[1,2,3]...]というリストを返す関数を作りたい

冪集合(_集合,_冪集合) :-
        findall(L,部分集合(_集合,L),_冪集合).

部分集合(L,X) :-
        length(L,M),
        for(1,N,M),
        組合せ(L,N,X).
部分集合(_,[]).

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