このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/152
#  [1] 授業単元:プログラミングC  
#  [2] 問題文(含コード&リンク):  
#  無限ループを用い、1〜50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は5等分(例;1〜10に4個, 11〜20に3個, 21〜30・・・41〜50に0個)して表示せよ。  
#  

'無限ループを用い、1〜50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は10等分(例;1〜10に4個, 11〜20に3個, 21〜30・・・41〜50に0個)して表示せよ。' :-
        length(L,10),
        '1〜50までの数値を得る'(N),
        無限ループを用い、1〜50までの数値を任意に10個入力し、(N,[],L),
        度数分布を求める(L,[1-10,11-20,21-30,31-40,41-50],_度数分布ならび),
        度数分布の表示(_度数分布ならび).

無限ループを用い、1〜50までの数値を任意に10個入力し、(N,L1,[N|L1]).
無限ループを用い、1〜50までの数値を任意に10個入力し、(N,L1,L) :-
        '1〜50までの数値を得る'(N2),
        無限ループを用い、1〜50までの数値を任意に10個入力し、(N2,[N|L1],L).

'1〜50までの数値を得る'(N) :-
        write('1〜50までの数値を入力してください : '),
        get_line(Line),
        数値入力診断(Line,N),!.
'1〜50までの数値を得る'(N) :- '1〜50までの数値を得る'(N).

数値入力診断(Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),
        N >= 1,N =< 50,!.
数値入力診断(Line,N) :-
        write_formatted('入力された %t からは1〜50までの数値は得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

度数分布を求める(L,[],[]) :- !.
度数分布を求める(L,[_階級下限-_階級上限|R1],[[_階級下限-_階級上限,_度数]|R2]) :-
        count((append(_,[N|_],L),N>=_階級下限,N=<_階級上限),_度数),
        度数分布を求める(L,R1,R2).

度数分布の表示([]) :- !.
度数分布の表示([[_階級下限-_階級上限,_度数]|R]) :-
        write_formatted('%t~%t : %t\n,[_階級下限,_階級上限,_度数]),
        度数分布の表示(R).