このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/834
#  【質問テンプレ】  
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文:標準入力に現れた数字文字の出現回数を*を使って 
#  数字の下側に表示するプログラムを作成せよ。 
#  http://codepad.org/T7Ft26pn 
#  上記のソースコードを元にして作成していただきたいです。 
#   
#  

'標準入力に現れた数字文字の出現回数を*を使って数字の下側に表示する' :-
        'EOFになるまで標準入力から入力する'(_文字ならび),
        現れた数字文字の出現回数(_文字ならび,[],_数字文字の出現回数ならび),
        '*を使って数字の下側に表示する'(_数字文字の出現回数ならび).

'EOFになるまで標準入力から入力する'(_文字ならび) :-
        get_chars(_文字ならび).

現れた数字文字の出現回数([],_数字文字の出現回数ならび,_数字文字の出現回数ならび).
現れた数字文字の出現回数([_文字|R],_数字文字の出現回数ならび,_数字文字の出現回数ならび) :-
        _文字 @>= '0',
        _文字 @=< '9',
        数字文字の出現回数更新(_文字,_数字文字の出現回数ならび1,_数字文字の出現回数ならび2),
        現れた数字文字の出現回数(R,[C_数字文字の出現回数ならび2,_数字文字の出現回数ならび).
現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび) :-
        \+((_文字 @>= '0',_文字 @=< '9')),
        現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび).

数字文字の出現回数更新(_文字,[],[[_文字,1]]) :-
        _文字 @>= '0',
        _文字 @=< '9',!.
数字文字の出現回数更新(_文字,[[_文字,_出現回数1]|R1],[[_文字,_出現回数2]|R2]) :-
        _文字 @>= '0',
        _文字 @=< '9',
        _出現回数2 is _出現回数 + 1,
        数字文字の出現回数更新(_文字,R1,R2),!.

'*を使って数字の下側に表示する'(_) :-
        び2,_数字文字の出現回数ならび).
現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび) :-
        \+((_文字 @>= '0',_文字 @=< '9')),
        現れた数字文字の出現回数(R,_数字文字の出現回数ならび1,_数字文字の出現回数ならび).

数字文字の出現回数更新(_文字,[],[[_文字,1]]) :-
        _文字 @>= '0',
        _文字 @=< '9',!.
数字文字の出現回数更新(_文字,[[_文字,_出現回数1]|R1],[[_文字,_出現回数2]|R2]) :-
        _文字 @>= '0',
        _文字 @=< '9',
        _出現回数2 is _出現回数 + 1,
        数字文字の出現回数更新(_文字,R1,R2),!.

'*を使って数字の下側に表示する'(_数字文字の出現回数ならび) :-
         転置(_数字文字の出現回数ならび,_転置された数字文字の出現回数ならび).
         _転置された数字文字の出現回数ならび = [_第一行数字文字ならび|R],
         concat_atom(_第一行数字文字ならび,_第一行文字列),
         writef('%t\n',[_第一行文字列]),
         max(R,Max),
         '*を使って数字の下側に表示する'(1,Max,R).

'*を使って数字の下側に表示する'(N,Max,_) :- N > Max,!.).
'*を使って数字の下側に表示する'(N,L) :-
        一行星か空白の印字(N,L),
        write('\n'),
        N2 is N + 1,
        '*を使って数字の下側に表示する'(N2,L).

一行星か空白の印字(N,L) :-
        append(_,[M|R],L),
        星か空白か(M,N,_印字文字),
        writef('%t',[_印字文字]),
        R = [],!.

星か空白か(M,N,*) :- M >= N,!.
星か空白か(M,N,' ') :- M < N,!.