このディレクトリの索引

冪集合和(_対象集合,_冪集合和) :-
        findall(_部分集合和,(
                    部分集合和(_対象集合,_部分集合和)),
                _冪集合和).

部分集合和([], 0).
部分集合和([_|R1],_部分集合和) :-
        部分集合和(R1,_部分集合和).
部分集合和([N|R1], _部分集合和) :-
        部分集合和(R1,_部分集合和_2),
        _部分集合和 is _部分集合和_2 + N.


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

冪集合和(_集合,_冪集合和) :-
        length(_集合,Len),
        findall(S,(
                    between(1,Len,N),
                    組合せ和(_集合,N,L,S)),
               LS),
        _冪集合和 = [0|LS].

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