このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/29
#  【質問テンプレ】  
#  [1] 授業単元: 情報数学2  
#  [2] 問題文(含コード&リンク):  
#    3行5列の15人の学生の身長が記録されたheight.csvがあります。 
#    それぞれの学生に対しランダムで0.1刻みで0.1から0.5までの値を付加します。 
#    このポイントを基礎ポイントといいます。 
#    \1行目の学生5人を取り出しそれぞれの学生に対し、 
#    *ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。 
#    5人の学生の中で与えられたポイントの合計が最も少ない学生を回の代表値とします。* 
#    基礎ポイントに対しランダム値を付加し回の代表値を選出する作業(*〜*)を、 
#    同じ1行目の5人の学生に対し5回行います。 
#    5回分の代表値の中で最も多い値を行の代表値とします。\ 
#    1行分の行の代表者の選出(\〜\)を3行分繰り返します。 
#    全てのステップを行い結果をresult.csvとして出力します。 
#  
#  http://hibari.2ch.net/test/read.cgi/tech/1294061094/30
#    result.csvの形式は、 
#    3行71列の表になります。 
#    1〜5列目まではheight.csvと同じ出力です。 
#    6〜10列目まではそれぞれの学生にどんな基礎ポイントが付加されたかを示し、 
#    11〜15列目は1回目のランダム付加でどのような値が付加されたかを示し、 
#    16〜20列目は基礎ポイントと付加ポイントの合計を示し、 
#    21列目は1回目の回の代表値を示し、 
#    22列目は回の代表者の身長を示します。 
#    23〜34列目は2回目、 
#    35〜46列目は3回目、 
#    47〜58列目は4回目、 
#    59〜70列目は5回目を示します。 
#    71列目は行の代表者の身長を示します。 
#      元のheight.csvの3行5列の並び順と、 
#    それ以降の処理での3行5列の部分の値の位置は対応するようにお願いします。 
#    長くなって申し訳ありません。 
#    よろしくお願いいたします。 
# 

'1行分の行の代表者の選出を3行分繰り返します。' :-
        '3行5列の15人の学生の身長が記録されたheight.csvがあります。'(LL),
        基礎ボイント(_基礎ポイント),
        tell('height.csv'),
        '1行分の行の代表者の選出を3行分繰り返します。'(1,LL,_基礎ポイント),
        told.

'1行分の行の代表者の選出を3行分繰り返します。'(_N行目,_,_) :- _N行目 > 3,!.
'1行分の行の代表者の選出を3行分繰り返します。'(_N行目,LL,_基礎ポイント) :-
        '同じN行目の5人の学生に対し5回行います。'(_N行目,LL,_基礎ポイント,_付加された基礎ポイント,_代表の身長).        
        _次の行 is _N行目 + 1,
        '1行分の行の代表者の選出を3行分繰り返します。'(_次の行,LL,_付加された基礎ポイント).

'3行5列の15人の学生の身長が記録されたheight.csvがあります。'(LL) :-
        get_aplit_lines('height.csv',[' ',','],LL).

基礎ポイント(_基礎ポイント) :-
        length(_基礎ポイント,3),
        findall(L,(
                    length(L,5),
                    append(_,[L|_],_基礎ポイント)),
                _基礎ポイント),
        'それぞれの学生に対しランダムで0.1刻みで0.1から0.5までの値を付加します。'(_基礎ポイント).

'それぞれの学生に対しランダムで0.1刻みで0.1から0.5までの値を付加します。'([]) :- !.
'それぞれの学生に対しランダムで0.1刻みで0.1から0.5までの値を付加します。'([L|R]) :-
        findall(_付加する数,(
                    append(_,[_付加する数|_],L),
                    _付加する数 is ((random mod 5) + 1) / 10)),
                L),
        'それぞれの学生に対しランダムで0.1刻みで0.1から0.5までの値を付加します。'(R).


'同じN行目の5人の学生に対し5回行います。'(_N行目,LL,_基礎ポイント,_付加された基礎ポイント,_代表の身長) :-
        list_nth(_N行目,LL,L),
        write_formatted('%t,%t,%t,%t,%t,',L),
        list_nth(_N行目,_基礎ポイント,_N行目の基礎ポイント),
        write_formatted('%t,%t,%t,%t,%t,',[_N行目の基礎ボイント]),
        length(Ln,5),
        '同じN行目の5人の学生に対し5回行います。'(Ln,_N行目,_基礎ポイント,_付加された基礎ポイント,_代表値ならび),
        行代表者の身長は(_N行目,LL,_代表値ならび,_代表の身長),
        write_formatted('%t\n',[_代表の身長]),!.

行代表者の身長は(_N行目,LL,_代表値ならび,_代表の身長).
        min(_代表値ならび,[_行の代表値,_n人目]),
        list_nth(_N行目,LL,L),
        list_nth(_n人目,L,_代表の身長),!.

'同じN行目の5人の学生に対し5回行います。'([],_,_基礎ポイント,_基礎ポイント,[]) :- !.
'同じN行目の5人の学生に対し5回行います。'([_|Ln],_N行目,_基礎ポイント,_付加された基礎ポイント,[[_代表値,_n人目]|R3]) :-
        'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(_N行目,_基礎ポイント,_付加された基礎ポイント2,_付加されたポインならび),
        '5人の学生の中で与えられたポイントの合計が最も少ない学生を回の代表値とします。'(_5人の与えられたポイントの合計ならび,_代表値,_n人目),
        代表者の身長(LL,_N行目,_n人目,_代表者の身長),
        一回分の表示(_N行目,_付加された基礎ポイント2,_付加されたポイントならび,_代表値,_代表者の身長),
        '同じN行目の5人の学生に対し5回行います。'(Ln,_N行目,_付加された基礎ポイント2,_付加された基礎ポイント,R3).

代表者の身長(LL,_N行目,_n人目,_代表者の身長) :-
        list_nth(_N行目,LL,L),
        list_nth(_n人目,L,_代表者の身長),!.

一回分の表示(_付加された基礎ポイント2,_付加されたポイントならび,_代表値,_代表者の身長) :-
        list_nth(_N行目,_付加されたポイント2,L),
        write_formatted('%t,%t,%t,%t,%t,',L),
        write_formatted('%t,%t,%t,%t,%t,',_付加されたポイントならび),
        write_formatted('%t,'[_代表値,_代表者の身長]),!.

'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(_,_,[],[],[]) :- !.
'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(_N行目,_N行目,[_N行目の学生の基礎ポイント|R1],[_付加された基礎ポイント|R2],[_付加する数ならび|R3]) :-
        findall(_付加する数,(
                    _付加する数 is ((random mod 5) + 1) / 10)),
                _付加する数ならび),
        findall(_付加された数,(
                    append(L01,[_学生の基礎ポイント|_],_N行目の学生の基礎ポイント),
                    append(L02,[_付加する数|_],_付加する数ならび),
                    length(L01,Len),
                    length(L02,Len),
                    _付加された数 is _付加する数 + _学生の基礎ポイント),
                _付加された基礎ポイント),
        N2 is _N行目 + 1,
        'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(N2,_N行目,R1,R2,R3).
'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(N,_N行目,[L|R1],[L|R2],R3) :-
        N2 is N1 + 1,
        'N行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(N2,_N行目,R1,R2,R3).

/*
'5人の学生の中で与えられたポイントの合計が最も少ない学生を回の代表値とします。'(_5人の与えられたポイントの合計ならび,_代表値,_n人目) :-
        min(_5人の与えられたポイントの合計ならび,_代表値),
        list_nth(_n人目,_5人の与えられたポイントの合計ならび,_代表値),!.

'基礎ポイントに対しランダム値を付加し回の代表値を選出する作業'(_基礎ポイント1,_基礎ポイント2,_代表値) :-
        '1行目の学生5人を取り出しそれぞれの学生に対し、ランダムで0.1刻みで0.1から0.5までの値を基礎ポイントに対し付加します。'(_基礎ポイント1,_基礎ポイント2),
        '5人の学生の中で与えられたポイントの合計が最も少ない学生を回の代表値とします。'(_基礎ポイント2,_代表値).
*/