>>693
% Prolog 前半部分(その二)

'点数は1~100の乱数によって与えること'(_国語の点数,_数学の点数,_英語の点数) :-
    'n個の範囲(1~100)の正規分布ならびを得る'(3,[_国語の点数,_数学の点数,_英語の点数]).

'n個の範囲(1~100)の正規分布ならびを得る'(_n個,_正規分布ならび) :-
    findall(Y2,(
          for(1,_,_n個),
          U is (random mod 100000) / 100000,
          R is ( 2 * pi * (random mod 100000)) / 100000,
          S is (-2) * log(1-U),
          X is sqrt(S) * cos(R),
          Y is sqrt(S) * sin(R),
          Y2 is truncate(100 * (Y + pi) / (2 * pi)) + 1),
        _正規分布ならび),!.

'実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示する'(_n人目,_10人の三教科の点数を二次配列) :-
    write('     国語 数学 英語\n'),
    10人の(_n人目),
    list_nth(_n人目,_10人の三教科の点数を二次配列,[_国語の点数,_数学の点数,_英語の点数]),
    write_formatted('%2d人目  %3d %3d %3d\n',[_n人目,_国語の点数,_数学の点数,_英語の点数]),
    _n人目 = 10,!.