このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/602
#  [1] 授業単元:配列  
#  [2] 問題文(含コード&リンク): 文字列を入力し、その文字列に含まれる英字、数字、その他の文字の数を出力せよ。 
#  

'文字列を入力し、その文字列に含まれる英字、数字、その他の文字の数を出力せよ。' :-
        '文字列を入力し'(_文字列),
        'その文字列に含まれる英字、数字、その他の文字の数を出力する。'(_文字列).
'文字列を入力し'(_文字列) :-
        get_line(_文字列).

'その文字列に含まれる英字、数字、その他の文字の数を出力する'(_文字列) :-
        'その文字列に含まれる英字、数字、その他の文字の数を'(_文字列,_英字の数,_数字の数,_その他の文字の数),
        出力する(_英字の数,_数字の数,_その他の文字の数).

'その文字列に含まれる英字、数字、その他の文字の数を'(_文字列,_英字の数,_数字の数,_その他の文字の数) :-
        findall(_文字種,(
                    sub_atom(_文字列,_,1,_,_文字),
                    文字種判定(_文字,_文字種)),
                L),
        count(member(英,L),_英字の数),
        count(member(数,L),_数字の数),
        count(member(他,L),_その他の文字の数).

文字種判定(_英字,英) :-
        _英字 @>= 'a',
        _英字 @=< 'z',!.
文字種判定(_英字,英) :-
        _英字 @>= 'A',
        _英字 @=< 'Z'.
文字種判定(_数字,数) :-
        _数字 @>= '0',
        _数字 @=< '9'.
文字種判定(_その他の文字,他) :-
        \+(英字(_その他の文字)),
        \+(数字(_その他の文字)).

出力する(_英字の数,_数字の数,_その他の文字の数) :-
        writef('英字の数 %t, 数字の数 %t, その他の文字の数 %t\n',[_英字の数,_数字の数,_その他の文字の数]).


%  count/2