このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/849
#  [1] 授業単元:計算機アルゴリズム  
#  [2] 問題文(含コード&リンク):  
#  設問1-1 
#  プログラム例6.3.1を配列変数xの要素数(変数memberの値)と各要素の値をキーボードから入力するように変更しなさい。 
#  プログラム例6.3.1 
#  #include <stdio.h> 
#   
#  int main(void) 
#  { 
#    int x[10] = {80, 56, 68, 75, 45, 100, 92, 73, 63, 95}; 
#    int member = 10; 
#    int total; 
#    float average; 
#    int i; 
#    for (i = 0, total = 0; i < member; ++i ) 
#      total += x[i]; 
#    average = (float)total / (float)member; 
#    printf("総和=%d\n",total); 
#    printf("平均点=%7.2f\n", average); 
#    return 0; 
#  } 
#   
#  設問1-2 
#  上記設問1-1と同じ配列変数xの要素をその並びを逆順にして配列変数yへ代入し、yの全要素を表示するプログラムを作りなさい。 
#  

'要素数と各要素の値を逆順にキーボードから入力して、その総和と平均点を求める' :-
        '要素数とならびの各要素を逆順に入力して'(_要素数,_ならび),
        全要素を表示する(_逆順ならび).

'要素数とならびの各要素を逆順に入力して'(_要素数,_逆順ならび) :-
        要素数の入力(_要素数),
        length(Ln,_要素数),
        ならびを逆順に入力([],Ln,[],_逆順ならび).

要素数の入力(_要素数) :-
        write('要素数を入力してください : '),
        get_line(Line),
        要素数入力診断(Line,_要素数),!.
要素数の入力(_要素数) :-
        要素数の入力(_要素数).

要素数入力診断(Line,_要素数) :-
        atom_to_term(Line,_要素数,_),
        integer(_要素数),
        _要素数 > 0,!.
要素数入力診断(Line,_要素数) :-
        writef('入力された %t からは適切な要素数が得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

ならびを逆順に入力(Ln,Ln,_逆順ならび,_逆順ならび) :- !.
ならびを逆順に入力(L0,Ln,L,_逆順ならび) :-
        length([_|L0],_何番目),
        writef('%t番目の数値を入力してください : '),
        値の入力(_値),
        ならびを逆順に入力([_|L0],Ln,[_値|L],_逆順ならび).

値の入力(_値) :-
        get_line(Line),
        値の入力診断(Line,_値),!.
値の入力(_値) :-
        値の入力(_値).

値の入力診断(Line,_値) :-
        atom_to_term(Line,_値,_),
        number(_値),!.
値の入力診断(Line,_値) :-
        writef('入力された%tからは数値が得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

全要素を表示する([]).
全要素を表示する([_要素]) :-
        writef('%t\n',[_要素]),!.
全要素を表示する([_要素|R]) :-
        writef('%t ',[_要素]),
        全要素を表示する(R).