このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/111
#  [1] 授業単元:C言語プログラミング 
#  [2] 問題文(含コード&リンク):テキストファイルを読み込み1次元の離散コサイン変換を行って、その結果を新たなテキストファイルに書き込むプログラムを作れ。 
#  
#  [5] その他の制限: 例 10,15,20,80,120,160,210,10,20,100...と続く
#  テキストデータ3つ(data.txt data2.txt data3.txt)を(それぞれ内容は違う)読み込む。
#  それぞれに1次元の離散コサイン変換を行う。
#  変換後の値を新たなテキストファイルに(data,data2,data3)改行(data,data2,data3)改行...といったような表示で書き込む。 

'テキストファイルを読み込み1次元の離散コサイン変換を行って、その結果を新たなテキストファイルに書き込む'(_テキストファイル名,_出力ファイル名) :-
        get_lines(_テキストファイル名,Lines),
        データ要素のならびとする(Lines,_要素ならび),
        '1次元の離散コサイン変換'(L1,L2),
        '新たなテキストファイルに書き込む'(_出力ファイル名,L2).

データ要素のならびとする(Lines,_要素ならび) :-
        concat_atom(Lines,',',S),
        split(S,[',',' '],_要素ならび).

'1次元の離散コサイン変換'(L1,L2) :-
        append([_第一要素],L,[_最終要素],L1),
        length(L1,N),
        '1次元の離散コサイン変換'(L,L,N,-1,_第一要素,_最終要素,L2).

'1次元の離散コサイン変換'([],_,_,_,_第一要素,_最終要素,[]).
'1次元の離散コサイン変換'([N|R1],L,N,-1,_第一要素,_最終要素,[Xk|R2]) :-
        findsum(U,(
                        append(_,[B|_],L),
                        length([_|L0],K),
                        U is _最終要素 * cos(pi/(N-1) * N * K)),
                Sum),
        Xk is _第一要素/2 + Sum + ((-1) / 2) * (_最終要素-1)),
        '1次元の離散コサイン変換'(R1,L,N,1,_第一要素,_最終要素,R2).
'1次元の離散コサイン変換'([N|R1],L,N,1,_第一要素,_最終要素,[Xk|R2]) :-
        findsum(U,(
                        append(L0,[B|_],L),
                        length([_|L0],K),
                        U is _最終要素 * cos((pi / (N-1)) * N * K),
                Sum),
        Xk is _第一要素/2 + Sum + ((1 / 2) * (_最終要素-1)),
        '1次元の離散コサイン変換'(R1,L,N,-1,_第一要素,_最終要素,R2).

'新たなテキストファイルに書き込む'(_テキストファイル名,L) :-
        open(_テキストファイル名,write,Outstream),
        append(_,[A|R],L),
        writef(Outstream,'%t,',[A]),
        R = [B],
        writef(Outstream,'%t\n',[B]),
        close(Outstream).