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

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

'文字列を入力し'(_文字列) :-
        get_line(_文字列).

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

'その文字列に含まれる英字、数字、その他の文字の数を'('',0,0,0).
'その文字列に含まれる英字、数字、その他の文字の数を'(_文字列,_英字の数,_数字の数,_その他の文字の数) :-
        sub_atom(_文字列,0,1,_残り文字数,_文字),
        sub_atom(_文字列,1,_残り文字数,0,_残り文字列),
        'その文字列に含まれる英字、数字、その他の文字の数を'(_残り文字列,_英字の数_1,_数字の数_1,_その他の文字の数_1),
        文字数加算(_文字,_英字の数_1,_数字の数_1,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数).

文字数加算(_文字,_英字の数_1,_数字の数,_その他の文字の数,_英字の数,_数字の数,_その他の文字の数) :-
        英字(_文字),
        _英字の数 is _英字の数_1 + 1.
文字数加算(_文字,_英字の数,_数字の数_1,_その他の文字の数,_英字の数,_数字の数,_その他の文字の数) :-
        数字(_文字),
        _数字の数 is _数字の数_1 + 1.
文字数加算(_文字,_英字の数,_数字の数,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数) :-
        \+(英字(_文字)),
        \+(数字(_文字)),
        _その他の文字の数 is _その他の文字の数_1 + 1.

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

英字(_英字) :-
        _英字 @>= 'a',
        _英字 @=< 'z',!.
英字(_英字) :-
        _英字 @>= 'A',
        _英字 @=< 'Z'.

数字(_数字) :-
        _数字 @>= '0',
        _数字 @=< '9'.