このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/161
#  [1] 授業単元:プログラミング言語  
#  [2] 問題文  
#     1.空白、タブ、改行を数えるプログラムを書け。 
#     2.二つ以上の空白を一つの空白に置き換えながら、入力を出力にコピーするプログラムを書け。 
#  

'空白、タブ、改行を数える'(_文字列,_空白数,_タブ数,_改行数) :-
        findall(L,(
                    sub_atom(_文字列,_,1,_,_文字),
                    数える(_文字,L1)),
               _集計行列),
        '集計行列から空白、タブ、改行を数える'(_集計行列,_空白数,_タブ数,_改行数).

数える(' ',[1,0,0]) :- !.
数える('\t',[0,1,0]) :- !.
数える('\n',[0,0,1]).

'集計行列から空白、タブ、改行を数える'(_集計行列,_空白数,_タブ数,_改行数) :-
        転置(_集計ならび,[L1,L2,L3]),
        sum(L1,_空白数),
        sum(L2,_タブ数),
        sum(L3,_改行数).