このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/670
#  [1] 授業単元:C言語演習 
#  [2] 問題文(含コード&リンク): 
#  #include<stdio.h> 
#  int main(void) 
#  { 
#    int  i=0; 
#    char *ptr; 
#    char str[128];  
#   
#    ptr = str; 
#     
#    scanf("%s",&str); 
#   
#    while(*ptr++){ 
#      i++; 
#    } 
#   
#  printf("%d\n",i); 
#  } 
#   
#  上記の入力したテキストの文字数を表示するプログラムの読み込み部分をファイル処理に変更せよ。 
#  fgetc() 関数を使用し、コマンドラインにファイル名が指定できるようにすること。 
#  ただし、ファイル名を指定しない場合は標準入力とする。 
#  ファイルが見つからなかった時はエラーメッセージを出し、プログラムを終了する。 
#  

'length系組込述語を使わず入力したテキストの文字数を表示する' :-
        get_chars(_文字ならび),
        ならびの文字数を数える(_文字ならび,_文字数),
        writef('文字数は %t文字です\n',[_文字数]).

ならびの文字数を数える([],0).
ならびの文字数を数える([_|R],_文字数) :-
        ならびの文字数を数える(R,_文字数_1),
        _文字数 is _文字数_1 + 1.

読み込み部分をファイル処理に変更する :-
        コマンドラインからファイル名を取り出す(_ファイル名),
        読み込み部分をファイル処理に変更する(_ファイル名).

読み込み部分をファイル処理に変更する(user_input,_文字数) :-
        ファイルから読み出しながら文字数を数える(user_input,_文字数).
読み込み部分をファイル処理に変更する(_ファイル名,_文字数) :-
        open(_ファイル名,read,Instream),
        ファイルから読み出しながら文字数を数える(Instream,_文字数),
        close(Instream).

ファイルから読み出しながら文字数を数える(Instream,0) :-
        at_end_of_stream(Instream),!.
ファイルから読み出しながら文字数を数える(Instream,_文字数) :-
        get_char(Instream,_),
        ファイルから読み出しながら文字数を数える(Instream,_文字数_1),
        _文字数 is _文字数_1 + 1.

コマンドラインからファイル名を取り出す(_ファイル名) :-
        current_prolog_flag(argv,ParameterList),
        append(_,['--'|UserParameterList],ParameterList),
        ParameterList = [_ファイル名|_],!.
コマンドラインからファイル名を取り出す(user_input).