katsu #1248(2007/07/21 06:49 GMT) [ Prolog ] Rating0/0=0.00
基本的なリスト操作述語が無いので、長たらしくなります。 リスト生成→乱打舞頭→頭から順番にN個という流れです。 randomizeは、M人分だけすれば良い気もします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
serial(S,E,[]):-S > E. serial(S,E,[S|R]):-succ(S,S1),serial(S1,E,R). remove([L|Ls],1,L,Ls). remove([],_,_,_):-fail. remove([L|Ls],N,E,[L|R]):-succ(N1,N),remove(Ls,N1,E,R). randomize([X],[X]). randomize(L,R):-random(N),length(L,Ll),Nx is floor(N * Ll) + 1,remove(L,Nx,Le,Rs),randomize(Rs,Rss),R=[Le|Rss]. take(_,0,[]). take([L|Ls],N,[L|R]):-succ(N1,N),take(Ls,N1,R). lot(N,M,R):-serial(1,N,L0),randomize(L0,L1),take(L1,M,R). :-lot(20,5,R),writeln(R),halt.
Rating0/0=0.00-0+
[ reply ]
katsu
#1248()
[
Prolog
]
Rating0/0=0.00
Rating0/0=0.00-0+
[ reply ]