このディレクトリの索引

#  多重組合せを作る述語 poly_member/3 を作れ.
#  たとえば
#  ?- L=[1,2,3,4,5,6],Type=[2,3],poly_member(L,A,Type).
#  A = [[1,2],[3,4,5]] ->
#  となるものを作る.

多重組合せ(L,_型,X) :-
        poly_member(L,_型,[],X,R).

多重組合せ(L,_型,L0,_多重組合せ,_残りならび) :-
        poly_member(L,_型,[],_多重組合せ,_残りならび).

poly_member(L,Type,L0,X,R) :-
        poly_member_2(L,Type,L0,X,R).
poly_member(L,Type,L0,X,R) :-
        poly_member_2(L,Type,Y,R1),
        append(L0,[Y],L0_2),
        poly_member(R1,Type,L0_2,X,R).

poly_member_2(L,[N|R2],[L0|R3],R) :-
        length(L0,N),
        append(L0,R1,L),
        poly_member_2(R1,R2,R3,R).
poly_member_2(L,[],[],L).