このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1311089619/726
#  [1] 授業単元:プログラミング演習  
#  [2] 問題文:char str[4]="ABCD" 
#  上記の変数strには"A" "B" "C" "D"がstrの[0]〜[3]が入っています。 
#  この文字を三つ取り出して文字が同じになってもいいので組み合わせを表示 
#  させるプログラムを教えてください。 
#  例: 
#  ABC 
#  ACB 
#  ADC 
#  AAA 
#  AAB 
#  

str('ABCD').

'char str[4]="ABCD" 上記の変数strには"A" "B" "C" "D"がstrの[0]〜[3]が入っています。この文字を三つ取り出して文字が同じになってもいいので組み合わせを表示させる' :-
        str(_文字列),
        atom_char(_文字列,_4文字ならび),
        findall(_重複組合せ,(
                    重複組合せ(_4文字ならび,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).

表示させる(_重複組合せならび) :-
        append(_,[_重複組合せ|R],_重複組合せならび),
        writef('%t,%t,%t\n',_重複組合せ),
        R = [].