このディレクトリの索引

%  項を副目標として、選択項を収集しその相加平均を取る。

findavg(_集約項,_項,_相加平均ならび) :-
        list(_集約項),
        findall(_集約項,_項,_値ならび),
        加算(_値ならび,_合計値ならび),
        length(_値ならび,_ならびの長さ),
        findall(_相加平均,(
                    member(_合計値,_合計値ならび),
                    _相加平均 is _合計値 / _ならびの長さ),
                _相加平均ならび),!.
findavg(_集約項,_項,_相加平均) :-
        findall(_集約項,_項,_値ならび),
        加算(_値ならび,_合計値),
        length(_値ならび,_ならびの長さ),
        _相加平均 is _合計値 / _ならびの長さ,!.

加算([L1|R1],L2) :-
        list(L1),
        転置([L1|R1],L3),
        転置されたならびの加算(L3,L2),!.
加算(L1,X) :-
        sum(L1,X).
        
sum([],0).
sum([V|R],Sum) :-
        sum(R,Sum2),
        Sum is V + Sum2.

転置されたならびの加算([],[]).
転置されたならびの加算([L1|R1],[S|R2]) :-
        sum(L1,S),
        転置されたならびの加算(R1,R2).