このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1260532772/911
#  お願いします 
#  [1] 授業単元:電子演算機演習 
#  [2] 問題文(含コード&リンク): 
#   2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。 
#  例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。 
#   
#   
#   (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数 
#   NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main 
#   関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、 
#   main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白 
#   又は改行まで) 
#  

wc(_ファイル) :-
        get_chars(_ファイル,Chars),
        wc(Chars,0,0,0,0,_総文字数,_単語数,_行数),
        write_formatted('%t %t %t\n',[_総文字数,_単語数,_行数]).

wc([],_総文字数,_単語数,_行数,0,_総文字数,_単語数,_行数).
wc([],_総文字数,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :-
        _単語数 is _単語数1 + 1,
        _行数 is _行数1 + 1,!.        
wc(['\n'|R],_総文字数1,_単語数1,_行数1,0,_総文字数,_単語数,_行数) :-
        _総文字数2 is _総文字数1 + 1,
        _行数2 is _行数1 + 1,
        wc(R,_総文字数2,_単語数1,_行数2,0,_総文字数,_単語数,_行数),!.
wc(['\n'|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :-
        _総文字数2 is _総文字数1 + 1,
        _単語数2 is _単語数1 + 1,
        _行数2 is _行数1 + 1,
        wc(R,_総文字数2,_単語数2,_行数2,0,_総文字数,_単語数,_行数),!.
wc([' '|R],_総文字数1,_単語数1,_行数1,0,_総文字数,_単語数,_行数) :-
        _総文字数2 is _総文字数1 + 1,
        wc(R,_総文字数2,_単語数1,_行数1,0,_総文字数,_単語数,_行数),!.
wc([' '|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :-
        \+(N = 0),
        _総文字数2 is _総文字数1 + 1,
        _単語数2 is _単語数1 + 1,
        wc(R,_総文字数2,_単語数2,_行数1,0,_総文字数,_単語数,_行数),!.
wc([A|R],_総文字数1,_単語数1,_行数1,N,_総文字数,_単語数,_行数) :-
        \+(N = 0),
        _総文字数2 is _総文字数1 + 1,
        N2  is N + 1,
        wc(R,_総文字数2,_単語数1,_行数1,N2,_総文字数,_単語数,_行数).