このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/929
#  よろしくお願いします 
#   
#  [1] 授業単元: C言語 
#  [2] 問題文(含コード&リンク):  
#  ひとつの英文をキーボードから入力し、その単語数と文字数を出力 
#  するプログラムを作成せよ。 
#  

'ひとつの英文をキーボードから入力し、その単語数と文字数を出力する' :-
        get_char(_文字),
        'ひとつの英文をキーボードから入力し、その単語数と文字数を'(_文字,[],0,0,_単語数,_文字数),
        出力する(_単語数,_文字数).

'ひとつの英文をキーボードから入力し、その単語数と文字数を'(_,_,_単語数,_文字数,_単語数,_文字数) :-
        at_end_of_stream(user_input),!.
'ひとつの英文をキーボードから入力し、その単語数と文字数を'(_文字,L0,_単語数_1,_文字数_1,_単語数,_文字数) :-
        単語数文字数の更新(_文字,L0,_単語数_1,_文字数_1,_単語数_2,_文字数_2),
        get_char(_次の文字),
        'ひとつの英文をキーボードから入力し、その単語数と文字数を'(_次の文字,[_文字|L0],_単語数_2,_文字数_2,_単語数,_文字数).

単語数文字数の更新(_文字,[],_,_,1,1) :-
        \+(member(_文字,[' ','\n',':',';'])),
        _文字数_2 is _文字数_1 + 1,!.
単語数文字数の更新(_文字,[_文字_0|_],_単語数_1,_文字数_1,_単語数_2,_文字数_2) :-
        member(_文字_0,[' ','\n',':',';']),
        \+(member(_文字,[' ','\n',':',';'])),
        _単語数_2 is _単語数_1 + 1,
        _文字数_2 is _文字数_1 + 1,!.
単語数文字数の更新(_文字,[_文字_0|_],_単語数,_文字数_1,_単語数,_文字数_2) :-
        _文字数_2 is _文字数_1 + 1,!.

出力する(_単語数,_文字数) :-
        writef('%t %t\n',[_単語数,_文字数]).