09/12/25 07:00:36
>>30
% Prolog 一般解を試みる。あまりすっきりしない。
'メンバーが男Mn人女Fn人で構成される時、男M人女N人をランダムに取り出す確率'(Mn,Fn,M,N,_確率) :-
メンバー全員は(Mn,Fn,Sn),
Sm is Sn - M - N + 1,
Mm is Mn - M + 1,
Nm is Nn - N + 1,
'男M人女N人の取り出し順序は何通りか'(M,N,_何通り),
'分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母),
'分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子),
_確率 is _分子 / _分母.
'分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母) :- 階乗(Sn,Sm,_分母),!.
'分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子) :-
階乗(Mn,Mm,A),
階乗(Fn,Fm,B),
_分子 is A * B * _何通り,!.
'男M人女N人の取り出し順序は何通りか'(M,N,_何通り) :-
S is M + N,
階乗(M,M1),
階乗(N,N1),
階乗(S,S1),
_何通り is S1 / ( M1 * N1 ).