Prologの宿題片付けます
■ このスレッドは過去ログ倉庫に格納されています
0224デフォルトの名無しさん
2011/08/01(月) 08:18:45.05一番自然なコードは
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,!.
■ このスレッドは過去ログ倉庫に格納されています