このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/670
#  問題 
#  入力ファイル中のアルファベット各文字の個数を数えるプログラムを作成せよ。(大文字と小文字は合わせて数える) 
#  スペースや記号、数字などは数えない。 
#   
#  そして、結果を文字数の多い順にソートして出力せよ。 
#   
#  コンパイラ 
#  gcc 
#   
#  期限 
#  2011/6/18 
# 

'入力ファイル中のアルファベット各文字の個数を数えるプログラムを作成せよ。(大文字と小文字は合わせて数える)スペースや記号、数字などは数えない。そして、結果を文字数の多い順にソートして出力する'(_入力ファイル) :-
        get_chars(_入力ファイル,Chars),
        setof([_大文字/_小文字],(
                    アルファベットを大文字小文字対にする(Chars,_大文字/_小文字)),
                L1),
        findall([Count,_大文字/_小文字],(
                    append(_,[_大文字/_小文字|_],L1),
                    大文字と小文字の数は合わせる(Chars,_大文字,_小文字Count)),
                L2),
        文字数の多い順にソートして出力する(L2).

ファイルに現れるアルファベットを大文字小文字対にする(Chars,_大文字/_小文字) :-
        member(Char,Chars),
        アルファベット(Char),
        to_upper(Char,_大文字),
        to_lower(Char1,_小文字).

大文字と小文字の数は合わせる(Chars,_大文字,_小文字,Count) :-
        count(member(_大文字,Chars),Count1),
        count(member(_小文字,Chars),Count2),
        Count is Count1 + Count2,!.

文字数の多い順にソートして出力せよ(L2) :-
        sort(L2,L3),
        reverse(L3,L),
        append(_,[Count,A/B]|R],L),
        writef('%t/%t, %t個\n',[A,B,Count]),
        R = [].

アルファベット(A) :-
       A @>= 'A',
       A @=< 'Z',!.
アルファベット(A) :-
       A @>= 'a',
       A @=< 'z',!.