09/12/25 22:26:12
>>85
% Prolog ここでも配列はリストと読み替えてください
'人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ' :-
人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数),
応じた配列を確保し(_クラスの人数,_科目の数,L),
データを入力する([_],L),
科目ごとの和を求める(_和ならび),
和ならびを表示する(_和ならび).
人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数) :- 催促付き整数入力('クラスの人数は ?',_クラスの人数),催促付き整数入力('科目の数は ?',_科目の数),!.
応じた配列を確保し(_クラスの人数,_科目の数,L) :- length(L,_クラスの人数),findall(L1,(member(L1,L),length(L1,_科目の数)),L).
データを入力する(_,[]) :- !.
データを入力する(NL,[L|R]) :-
length(NL,N),write_formatted('%t番目の学生は ?',[N]),
findall(A,(member(A,L),get_integer(A)),L),
データを入力する([_|NL],R).
科目ごとの合計を求める(L,_和ならび) :- 行列の転置(L,L1),findall(S,(member(L2,L1),sum(L2,S)),_和ならび).
和ならびを表示する([]) :- !.
和ならびを表示する([_和|R]) :- write_formatted('%t\n',[_和]),和ならびを表示する(R).