このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/14
#  【質問テンプレ】  
#  [1] 授業単元: Cプログラミング入門2 
#  [2] 問題文(含コード&リンク): 
#    ファイル入出力関数を使って偶数個の値が入ったsample.csvから 
#    偶数行の数値だけを取り出したeven.csvと 
#    奇数行の数値だけとりだしたodd.csvを作成し 
#    even.csvからodd.csvの値を引いたdiff.csvを作成しなさい。 
#  

'偶数個の値が入ったsample.csvから偶数行の数値だけを取り出したeven.csvと奇数行の数値だけとりだしたodd.csvを作成しeven.csvからodd.csvの値を引いたdiff.csvを作成しなさい。' :-
        get_split_lines('sample.csv',[' ',','],LL1),
        '偶数行の数値だけを取り出したeven.csvと'(LL1),
        '奇数行の数値だけとりだしたodd.csvを作成し'(LL1),
        'even.csvからodd.csvの値を引いたdiff.csvを作成する'.

'偶数行の数値だけを取り出したeven.csvと'(LL) :-
        open('even.csv',write,Outstream1),
        '偶数行の数値だけを書く'(Outstream1,LL),        
        close(Outstream1).

'奇数行の値数値だけをとり出したeven.csvを作成し'(LL) :-
        open('odd.csv',write,Outstream2),
        '奇数行の数値だけを書く'(Outstream2,LL),        
        close(Outstream2).

'偶数行の数値だけを書く'(Outstream1,LL) :- !.
'偶数行の数値だけを書く'(Outstream1,[_,L|R]) :-
        concat_atom(L,',',S),
        write_formatted(Outstream,'%t\n',[S]),
        '偶数行の数値だけを書く'(Outstream1,R).

'奇数行の数値だけを書く'(Outstream1,LL) :- !.
'奇数行の数値だけを書く'(Outstream1,[L,_|R]) :-
        concat_atom(L,',',S),
        write_formatted(Outstream1,'%t\n',[S]),
        '奇数行の数値だけを書く'(Outstream1,R).

'even.csvからodd.csvの値を引いたdiff.csvを作成する' :-
        get_split_lines('even.csv',[' ',','],LL1),
        get_split_lines('odd.csv',[' ',','],LL2),
        'LL1からLL2の値を引く'(LL1,LL2,LL3),
        open('diff.csv',write,Outstream),
        csvファイルとして書く(Outstream,LL3),
        close(Outstream).                

'LL1からLL2の値を引く'([],[],[]) :- !.
'LL1からLL2の値を引く'([A|R1],[B|R2],[C|R3]) :-
        C is A - B,
        'LL1からLL2の値を引く'(R1,R2,R3).

csvファイルとして書く(Outstream,[]) :- !.
csvファイルとして書く(Outstream,[L|R]) :-
        concat_atom(L,',',S),
        write_formatted(Outstream,'%t\n',[S]),
        csvファイルとして書く(Outstream,R).