このディレクトリの索引
% http://pc12.2ch.net/test/read.cgi/tech/1200175247/529
% [1] 授業単元:Ruby 
% [2] 問題文 ファイル分割 
%
% 下記は、hoge.csvを均等に4分割して tmp/ 以下に書き込むプログラムである。 
%
% ruby split.rb hoge.csv tmp/ 4 
%
% 出力例 
% tmp/1out.csv 
% tmp/2out.csv 
% tmp/3out.csv 
% tmp/4out.csv 

t131(_分割されるファイル,_分割数) :-
    get_lines(_分割されるファイル,[_先頭行|L]),
    length(L,Len),
    Div is Len // _分割数,
    Mod is Len mod _分割数,
    t131(L,Div,Mod,1,X),
    t131(_分割数,_先頭行,X),
    fail;
    true.

t131(_分割数,_先頭行,L) :-
    for(1,N,_分割数),
    list_nth(N,L,X),
    concat_atom(['tmp/',N,'out.csv'],F),
    put_lines(F,[_先頭行|X]),
    N=_分割数.

t131([],_,_,_,_).
t131(L,Div,Mod,Gth,[X|R])
    切り取り行数(Div,Mod,Gth,M),
    member_n(M,X,L,RL),
    Gth2 is Gth+1,
    t131(RL,Div,Mod,Gth2,R).

切り取り行数(Div,Mod,Nth,X) :- Nth > Mod,X is Div.
切り取り行数(Div,Mod,Nth,X) :- Nth =< Mod,X is Div + 1.

member_n(N,X,L,R) :-
    length(X,N),
    append(X,R,L).