このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1289913298/357
#   
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  -------------------  
#  /*hogehoge*/  
#  int main(){/*ggg*/  
#  printf("xxxxxx");  
#  }  
#  int a=c;  
#  -------------------  
#  上記のソース総ステップ数5ステップ、実ステップ数3ステップ、  
#  コメント率40%が求められるステップカウンターを作製せよ。  
#  また、以下の条件を提示する。  
#  1.ディレクトリ単位で読み込めるようにする。  
#  2.Cファイルのみのステップ数を求めるようにする。  
#  

ディレクトリ中のCファイル名を取得してそのステップ数を表示する(_ディレクトリ) :-
        ディレクトリ中のCファイル名を取得する(_ディレクトリ,_Cファイル名ならび),
        append(_,[_Cファイル名|R],_Cファイル名ならび),
        ステップ数を計る(_Cファイル名,_総ステップ数,_実ステップ数,_コメント数),
        write_formatted('ファイル名 : %t, 総ステップ数 : %t, 実ステップ数 : %t, コメント数 : %t\n',[_Cファイル名,_総ステップ数,_実ステップ数,_コメント数]),
        R = [],!.

ディレクトリ中のCファイル名を取得する(_ディレクトリ,_Cファイル名ならび) :-
        concat_atom(['ls -N _ディレクトリ,'/','*.c'],S),
        shs(S,_Cファイル名ならび).

ステップ数を計る(_Cファイル名,_総ステップ数,_実ステップ数,_コメント数) :-
        get_chars(_Cファイル名,Chars),
        ステップ数を計る(Chars,0,0,0,_総ステップ数,_実ステップ数,_コメント数).

ステップ数を計る([],_総ステップ数,_実ステップ数,_コメント数,_総ステップ数,_実ステップ数,_コメント数) :- !.
ステップ数を計る([''|R],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :-
        ステップ数を計る(R,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数),!.
ステップ数を計る(['}'|R],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :-
        ステップ数を計る(R,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数),!.
ステップ数を計る(L,S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :-
        append(L0,['}'|R],L),
        all(L0,' '),
        S1_2 is S1 + 1,
        ステップ数を計る(R,S1_2,S2,S3,_総ステップ数,_実ステップ数,_コメント数).
ステップ数を計る(['/','*'|R1],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :-
        コメント行(R1,R2,S3,S3_2),
        ステップ数を計る(R2,S1,S2,S3_2,_総ステップ数,_実ステップ数,_コメント数).
ステップ数を計る(['\n'|R1],S1,S2,S3,_総ステップ数,_実ステップ数,_コメント数) :-
        S1_2 is S1 + 1,
        S2_2 is S2 + 1,
        ステップ数を計る(R1,S1_2,S2_2,S3,_総ステップ数,_実ステップ数,_コメント数).

コメント行(['*','/'|R],R,S3,S3) :- !.
コメント行(['\n'|R1],R,S1,S) :-
        S2 is S3 + 1,
        コメント行(R1,R,S2,S),!.