このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/972
#  #include 
#  main(){ 
#   int i,j; 
#   j=1; 
#   for(i=1;i<11;i++){ 
#    j=i*j; 
#   } 
#   printf("j=%d",j); 
#   return 0; 
#  } 
#  をwhile文に書き換える時に、 
#  正の整数が入力される限り繰り返すときのwhileの条件文を教えてください 
# 
# 

'正の整数が入力される限りwhileを繰り返す' :-
        while(_i > 0,[_i],1,_j),
        writef('_j = %t\n',[_j]).

while(_条件文,_変数リスト_1,_j_1,_j) :-
        項複写変数指定付き(_条件文,_条件文_2,_変数リスト_1,_変数リスト_2),
        get_integer(_i),
        _j_2 is _i * _j_1,
        _条件文,
        while(_条件文_2,_変数リスト_2,_j_2,_j).
while(_,_,_j,_j).


%  項複写変数指定付き/4

%  Prologで一番問題となる定義だ。
%  
%  高階述語の罠で、項を複写しないと、再帰中に一度束縛された変数が
%  解かれずに、そのまま次の呼び出しの引数となり、failしてしまう。
%
%  それを回避するのが項複写変数指定付き/4。全く同型の別の複合項を
%  複写して、その中の変数とこれも新たに生成された変数を結びつける。
%  こうすることによって、受取側述語でもその変数の利用が可能になる。
%
%  もし、この部分がうまくできていないと、条件文中の変数が何であるか
%  ここでの場合では、get_integer(_i)の_iに当たる変数が引数の中の
%  何であるかがわからない。項複写されたものは元の_iとは無縁だから。