このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/503
#  あんまり暇なんでΣのプログラムの例を作ってみた 
#  #include <stdio.h> 
#  typedef double(*fk)(double); 
#  double sigma(int k,int klimit,fk);  
#  /* 
#  例えば 
#   5 
#   Σ (2k+1) 
#   k=1 
#  */ 
#  double func(double k) 
#  { 
#   return 2*k+1; 
#  } 
#  double sigma(int k,int klimit,fk FK) 
#  { 
#   double red = 0; 
#   for(;k <= klimit;k++){ 
#    printf("%.0lf",FK(k)); 
#    if(k<klimit) 
#     putchar('+'); 
#    red += FK(k); 
#   } 
#   return red; 
#  } 
#  int main() 
#  { 
#   double result = sigma(1,5,func); 
#   printf("=%.0lf \n",result); 
#   return 0; 
#  } 
# 
#  

シグマ(_k,S,E,_式,X) :-
        実数総計(Y,(
                    for(S,_k,E),
                    Y is _式),
                X).

実数総計(_選択項,_項,_合計値) :-
        findall(_選択項,_項,_値ならび),
        実数加算(_値ならび,_合計値),!.

実数加算([],0.0).
実数加算([A|R],S) :-
        実数加算(R,S1),
        S is S1 + A.

% ?- シグマ(_k,1,5,2 * _k + 1,X).
% X = 35.0
% 
%  この問題のポイント
%  シグマの第一引数は変数のまま質問します。ただし、必ず _式 の中に_k を含める
%  ようにします。この点が大事です。第一引数の _k は _式 の中で
%  シグマの _k に当たるものが何であるかを知らせるためにあります。