このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/304
#  次レスにまとめても規制されてしまったので・・・・ 
#  [2] 問題文:[1],[2]のプログラムを作成せよ。 
#        [1]多項式の次数nと係数a,(i=0,1・・・・,n)を入力し、 
#                その多項式f(x)=a_nx^2+a_n-1x^n-1+・・・+a_2x^2+a_1x+a_0と 
#         その微分の多項式f'(x)を出力するプログラムを作成せよ。 
#         ただし、nはint型,a_iはdouble型の配列とせよ。n<100と仮定してよい。 
#         以下に入力例を示す 
#  n=5 
#                a5=1 
#                a4=0 
#                a3=2 
#                a2=0 
#                a1=3 
#                a0=0 
#                f(x)=x^5+2x^3+3x 
#                f'(x)=5x^4+6x^2+3 
# 
# 


'多項式の次数nと係数a,(i=0,1・・・・,n)を入力し、その多項式f(x)=a_nx^n+a_n-1x^n-1+・・・+a_2x^2+a_1x+a_0とその微分の多項式f''(x)を出力する'(_n,_係数ならび) :-
        findall(S,(
                    append(L0,[A|R],_係数ならび),
                    length(R,N),
                    項文字列の生成(A,N)),
                L1),
        多項式に整形(L1,L2),
        concat_atom(L2,_多項式).        

項文字列の生成(0,_,'') :- !.
項文字列の生成(A,0,S) :- write_formatted_atom('%t',[A],S),!.
項文字列の生成(A,1,S) :- A > 1,write_formatted_atom('%tx',[A],S),!.
項文字列の生成(1,1,x) :- !.
項文字列の生成(A,N,S) :- write_formatted_atom('%tx^%t',[A,N],S),!.

多項式に整形(L1,_多項式) :-
        加減算符号を付加(L1,L2),
        先頭項のプラスは削除(L2,L3),
        concat_atom(L3,_多項式),!.

加減算符号を付加([],[]) :- !.
加減算符号を付加([A|R1],[A|R2]) :- sub_atom(A,0,1,_,'-'),加減算符号を付加(R1,R2),!.
加減算符号を付加([A|R1],['+',A|R2]) :- 加減算符号を付加(R1,R2),!.

先頭項のプラスは除去(['+'|L],L) :- !.
先頭項のプラスは除去(L,L).