このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/434
#  [1] 授業単元:C言語  
#  [2] 問題文(含コード&リンク): http://codepad.org/FYsQ9RGx 
#  
#  13-1 標準入出力
#  
#  標準入力を標準出力する簡易catコマンドを作成せよ.
#  
#  $ cat sample.txt
#  1. Software Engineering
#  
#  Based on the tenets of software engineering and computing science,
#  the Department of Software Engineering provides students with
#  a comprehensive grounding in software development and information
#  processing. As society becomes increasingly dependent on various
#  ... 略 ...
#  
#  $ ./ex1301-10se000 < sample.txt > sample-out.txt
#  $ cat sample-out.txt
#  1. Software Engineering
#  
#  Based on the tenets of software engineering and computing science,
#  the Department of Software Engineering provides students with
#  a comprehensive grounding in software development and information
#  processing. As society becomes increasingly dependent on various
#  ... 略 ...
#  
#  sample.txtをダウンロードしてデバッグに使用すると良い.
#  標準入力のファイルポインタはstdinである.p.222の「標準入力と標準出力」を参照.p.153の関数getchar(), putchar()を用いるのもよい.
#  13-2 ファイル入出力
#  
#  ファイルを読み込んで,ファイル中の英小文字を英大文字に,英大文字を英小文字に変換してファイルに書き出すプログラムを作成せよ.
#  
#  $ cat sample.txt
#  1. Software Engineering
#  
#  Based on the tenets of software engineering and computing science,
#  the Department of Software Engineering provides students with
#  a comprehensive grounding in software development and information
#  processing. As society becomes increasingly dependent on various
#  ... 略 ...
#  
#  $ ./ex1303-10se000
#  入力ファイル名 > sample.txt
#  出力ファイル名 > sample-out.txt
#  $ cat sample-out.txt
#  1. sOFTWARE eNGINEERING
#  
#  bASED ON THE TENETS OF SOFTWARE ENGINEERING AND COMPUTING SCIENCE,
#  THE dEPARTMENT OF sOFTWARE eNGINEERING PROVIDES STUDENTS WITH
#  A COMPREHENSIVE GROUNDING IN SOFTWARE DEVELOPMENT AND INFORMATION
#  PROCESSING. aS SOCIETY BECOMES INCREASINGLY DEPENDENT ON VARIOUS
#  ... 略 ...
#  
#  13-3 ファイル入力.コマンドライン入力
#  
#  行数,単語数,バイト数,ファイル名を以下の様に出力するような簡易wcを作成せよ.オプションは指定できなくても良い.
#  
#  $ ./ex1303-10se000 sample.txt
#        33     230    1674 sample.txt
#  $ wc sample.txt
#        33     230    1674 sample.txt
#  
#  行数,単語数,バイト数は,(C言語の)整数で表せる大きさであると仮定して良い.本問題における「単語」は,コマンドwcにおける定義で考えよ.コマンド wc は man wc で調べることができる.
#  13-4 ファイル入力,コマンドライン入力
#  
#  第2引数で示された(単一の)ファイル内において第1引数の単語が出現する行をすべて出力するプログラムを作成せよ.
#  
#  $ ./ex1304-10se000 Software sample.txt
#  1. Software Engineering
#  the Department of Software Engineering provides students with
#  $ grep Software sample.txt
#  1. Software Engineering
#  the Department of Software Engineering provides students with

'行数,単語数,バイト数,ファイル名を以下の様に出力する' :-
        user_parameters([wc,_ファイル名]),
        get_chars(_ファイル名,Chars),
        length(Chars,_バイト数),
        '行数,単語数'(Chars,_行数,_単語数),
        writef('%t %t %t %t\n',[_行数,_単語数,_バイト数,_ファイル名]),!.

'行数,単語数'([],[],0,0) :- !.
'行数,単語数'(['\n'|R1],[],_行数,_単語数) :-
        '行数,単語数'(R1,W,_行数_1,_単語数_1),
        単語数加算(W,_単語数_1,_単語数),
        _行数 is _行数_1 + 1,!.
'行数,単語数'([C|R1],[],_行数,_単語数) :-
        member(C,[' ',' ',',','.']),
        '行数,単語数'(R1,W,_行数,_単語数_1),
         単語数加算(W,_単語数_1,_単語数),!.
'行数,単語数'([C|R1],[C|R2],_行数,_単語数) :-
        \+(member(C,[' ',' ',',','.'])),
        '行数,単語数'(R1,R2,_行数,_単語数).

単語数加算([],_単語数,単語数) :- !.
単語数加算([_|_],_単語数_1,単語数) :-
        _単語数 is _単語数_1 + 1,!.