このディレクトリの索引

成績(尾崎,前期,国語,30). 成績(尾崎,前期,社会,40). 成績(山崎,前期,国語,20). 成績(山崎,前期,社会,50). 成績(尾崎,後期,国語,50). 成績(山崎,後期,国語,40). 集約合計を得る(_目標,_集約対象項,_集約鍵ならび,_集約値) :- 鍵となる値ならび(_集約鍵ならび,_目標,_鍵となる値ならび), 集約する鍵値毎に合計を得る(_目標,_集約対象項,_鍵となる値ならび,_集約鍵ならび,_集約値). 集約する鍵値毎に合計を得る(_目標,_集約対象項,_鍵となる値ならび,_集約鍵ならび,_集約値) :- member(_集約鍵ならび,_鍵となる値ならび), 対象項の合計をとる(_集約対象項,_目標,_集約値). 対象項の合計をとる(_対象項,_目標,_合計) :- findall(_対象項,_目標,L), 合計をとる(L,_合計). 鍵となる値ならび(_集約鍵ならび,_目標,_鍵となる値ならび) :- term_variables(_目標,_全ての変数ならび), setof(_集約鍵ならび,_全ての変数ならび ^ _目標,_鍵となる値ならび). % 実行例 合計をとる(L,_合計) :- 'Lが数値ならび場合、sum_listで合計を得る'(L,_合計). 合計をとる(L,_合計ならび) :- 'Lの要素がならびの場合、ならび要素ごとの合計ならびを得る'(L,_合計ならび). 'Lが数値ならび場合、sum_listで合計を得る'([],0). 'Lが数値ならび場合、sum_listで合計を得る'([A|R],_合計) :- number(A), sum_list([A|R],_合計). 'Lの要素がならびの場合、ならび要素ごとの合計ならびを得る'(L,_合計ならび) :- 'Lの要素がならびの場合'(L), ならび要素ごとの合計ならびを得る(L,_合計ならび). 'Lの要素がならびの場合'(L) :- L = [L1|R], is_list(L1). ならび要素ごとの合計ならびを得る(LL,_合計ならび) :- 転置(LL,LL2), '転置されたLL2の各要素をsum_listしたならびを得る'(LL2,_合計ならび). '転置されたLL2の各要素をsum_listしたならびを得る'(LL2,_合計ならび) :- findall(_合計,( member(L,LL2), sum_list(L,_合計)),_合計ならび). 転置([],[],[]):- !. 転置([[A|R1]|R2],[R1|R3],[A|R4]):- 転置(R2,R3,R4). 転置([[]|_],[]):- !. 転置(L,[L1|R2]):- 転置(L,L2,L1), 転置(L2,R2).