このディレクトリの索引
#  
#  与えたリストをシャッフルするshuffle/2を実装してください。
#  
#  ?- shuffle([a,b,c], X).
#  X = [b,a,c];
#  false
#  

shuffle_n(0,_,_リスト,_リスト) :- !.
shuffle_n(_n,_カードの枚数,_入力リスト,_出力リスト) :-
        shuffle(_入力リスト,_切られたリスト),
        _n_1 is _n - 1,
        shuffle_n(_n_1,_カードの枚数,_切られたリスト,_出力リスト).

shuffle(_カードの枚数,_入力リスト,_出力リスト) :-
        _乱数値1 is random(_カードの枚数) + 1,
        _乱数値2 is random(_カードの枚数) + 1,
        交換(1,[_乱数値1,_乱数値2],V1,V2,_入力リスト,_出力リスト).

交換(N,_交換位置リスト,V1,V2,[A|R1],[A|R2]) :-
        \+(member(N,_交換位置リスト)),
        N2 is N + 1,
        交換(N2,_交換位置リスト,V1,V2,R1,R2),!.
交換(N,_交換位置リスト,V1,V2,[A|R1],[V2|R2]) :-
        var(V1),
        V1 = A,
        N2 is N + 1,
        交換(N2,_交換位置リスト,V1,V2,R1,R2),!.
交換(_,_,V1,V2,[A|R],[V1|R]) :-
        var(V2),
        V2 = A,!.