このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/843
#  [1] 授業単元:文字列  
#  [2] 問題文(含コード&リンク):  
#  ファイルinput.txtに、1行最大80文字で空白を挟みながら、英数字が記載されている。 
#  このinput.txtを読み込み、その中に含まれるアルファベット・数字の各文字が何文字ずつあるかを表示するプログラムを作りなさい 
#  
'ファイルinput.txtに、1行最大80文字で空白を挟みながら、英数字が記載されている。このinput.txtを読み込み、その中に含まれるアルファベット・数字の各文字が何文字ずつあるかを表示する' :-
        'このinput.txtを読み込み'(Chars),
        'その中に含まれるアルファベット・数字の各文字が何文字ずつあるか'(Chars,L),
        表示する(L).

'このinput.txtを読み込み'(Chars) :-
        get_chars('input.txt',Chars),!.

その中に含まれるアルファベット・数字の各文字が何文字ずつあるか(Chars,L) :-
        'アルファベット・数字'(Alphabets),
        setof(Char,(
                   member(Char,Chars),
                   member(Char,Alphabets)),
                L1),
        findall([Char,Count],(
                    member(Char,L1),
                    count(member(Char,Chars),Count)),
                L),!.

表示する(L) :-
        append(_,[[_文字,_出現数]|R],L),
        writef('文字 %t  %t回\n',[_文字,_出現数]),
        R = [].

'アルファベット・数字'(Chars) :-
        findall(Char1,(
                    for(65,N1,90),
                    char_code(Char1,N1)),
                L1),
        findall(Char2,(
                    for(97,N2,122),
                    char_code(Char2,N1)),
                L2),
        findall(Char3,(
                    for(48,N3,57),
                    char_code(Char3,N3)),
                L3),
        append(L1,L2,L4),
        append(L4,L3,Chars),!.