このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/309
#  1から5の間の自然数を10個入力する。このとき入力された数の個数を棒グラフで次のように表示させる。 
#  例: 1の入力が4回、2では2回、3では3回、4では0回、5では1回の場合 
#  * 
#  * *  
#  * * *  
#  * * * * 
#  1 2 3 4 5 
#  という感じです。全くできないので助けてください 
# 

'1から5の間の自然数を10個入力する。このとき入力された数の個数を棒グラフで次のように表示させる' :-
        '1から5の間の自然数を10個入力する'(L),
        横方向棒グラフを作る(L,LL1),
        転置(LL1,LL2),
        棒グラフ表示(LL2).

'1から5の間の自然数を10個入力する'(L) :-
        length(L,10),
        findall(N,(
                    append(L0,[N|_],L),
                    '1から5の間の自然数を'(L0,N)),
                L).

'1から5の間の自然数を'(L0,_自然数分の星ならび) :-
        length([_|L0],M),
        concat_atom([M,'1から5の間の自然数([',M,'/10] : '],_催促文),
        '1から5の間の自然数を'(_催促文,M,N),!.

'1から5の間の自然数を'(_催促文,M,N) :-
        writef('%t',[_催促文]),
        get_line(Line),
        '1から5の間の自然数入力診断'(Line,N),!.
'1から5の間の自然数を'(_催促文,M,N) :-
        '1から5の間の自然数を'(_催促文,M,N).

'1から5の間の自然数入力診断'(Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),
        N >= 1,
        N =< 5,!.
'1から5の間の自然数入力診断'(Line,N) :-
        writef('入力された%tからは1から5の間の自然数が得られません\n',[Line]),
        fail.

横方向棒グラフを作る([],[]).
横方向棒グラフを作る([N|R1],[L|R2]) :-
        length(L,5),
        length(L1,N),
        all(L1,'*'),
        append(L0,L1,L),
        all(L0,' '),
        横方向棒グラフを作る(R1,R2).

棒グラフ表示(LL) :-
        append(_,[L|R],LL),
        concat_atom(L,' ',_行表示文字列),
        writef('%t\n',[_行表示文字列]),
        R = [],
        write('1 2 3 4 5\n').