このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/574
#  [1] 授業単元: プログラミング基礎 
#  [2] 問題文(含コード&リンク): 
#  ファイル名を一つ引数として指定し、その中に含まれている (いわゆる半角の)アルファベットの出現頻度を調べて表示するプログラムを作れ。但し、大文字小文字は同一視するものとする。 
#  ./countchar aaa.txt 
#  a: 10 
#  b: 5 
#  c: 20 
#  d: 7 
#  e: 31 
#  ... 
#  z: 2 
#   
#  のような感じ。 
#  

'ファイル名を一つ引数として指定し、その中に含まれている (いわゆる半角の)アルファベットの出現頻度を調べて表示するプログラムを作れ。但し、大文字小文字は同一視するものとする。'(_ファイル名) :-
        get_codes(_ファイル名,Codes),
        'その中に含まれている (いわゆる半角の)アルファベットの出現頻度を調べて表示する'(Codes).

'その中に含まれている (いわゆる半角の)アルファベットの出現頻度を調べて表示する'(Codes) :-
        '但し、大文字小文字は同一視するものとする。'(Codes,_変換されたCodes),
        出現頻度を調べて表示する(_変換されたCodes).

出現頻度を調べて表示する(_変換されたCodes) :-
        出現頻度を調べて(_変換されたCodes,_文字コード,_出現頻度,_残りCodes),
        表示する(_文字コード,_出現頻度),
        _残りCodes = [],!.

出現頻度を調べて(_変換されたCodes,_文字コード,_出現頻度,L2) :-
        整列(_変換されたCodes,_整列されたCodes),
        append(L0,[Code|R1],L2,_整列させたCodes),
        all(R1,Code),
        \+(member(Code,L0)),
        \+(member(Code,L2)),
        length([Code|R1],_出現頻度).

表示する(_文字コード,_出現頻度) :-
        char_code(_文字,Code),
        writef('%t: %t\n',[_文字,_出現頻度]).

'但し、大文字小文字は同一視するものとする。'([],[]) :- !.
'但し、大文字小文字は同一視するものとする。'([Code|R1],[_変換されたCode|R2]) :-
        アルファベット大文字コードを小文字コードに変換(Code,_変換されたCode),
        '但し、大文字小文字は同一視するものとする。'(R1,R2).

アルファベット大文字コードを小文字コードに変換(Code1,Code2) :-
        Code1 >= 65,
        Code1 =< 90,
        Code2 is Code1 + 32,!.
アルファベット大文字コードを小文字コードに変換(Code,Code).