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

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

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

'その文字列に含まれる英字、数字、その他の文字の数を'(_文字列,_英字の数,_数字の数,_その他の文字の数) :-
        atom_chars(_文字列,Chars),
        'ならび要素の英字、数字、その他の文字の数を'(Chars,0,0,0,_英字の数,_数字の数,_その他の文字の数).

'ならび要素の英字、数字、その他の文字の数を'([],_英字の数,_数字の数,_その他の文字の数,_英字の数,_数字の数,_その他の文字の数).
'ならび要素の英字、数字、その他の文字の数を'([_文字|R],_英字の数_1,_数字の数_1,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数) :-
        英字(_文字),
        _英字の数_2 is _英字の数_1 + 1,
        'ならび要素の英字、数字、その他の文字の数を'(R,_英字の数_2,_数字の数_1,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数).
'ならび要素の英字、数字、その他の文字の数を'([_文字|R],_英字の数_1,_数字の数_1,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数) :-
        数字(_文字),
        _数字の数_2 is _数字の数_1 + 1,
        'ならび要素の英字、数字、その他の文字の数を'(R,_英字の数_1,_数字の数_2,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数).
'ならび要素の英字、数字、その他の文字の数を'([_文字|R],_英字の数_1,_数字の数_1,_その他の文字の数_1,_英字の数,_数字の数,_その他の文字の数) :-
        \+(英字(_文字)),
        \+(数字(_文字)),
        _その他の文字の数_2 is _その他の文字の数_1 + 1,
        'ならび要素の英字、数字、その他の文字の数を'(R,_英字の数_1,_数字の数_1,_その他の文字の数_2,_英字の数,_数字の数,_その他の文字の数).


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

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

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