このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/345
#  [1]計算機基礎実習 
#  [2]問題文:http://ime.nu/codepad.org/dCFDDyhz  
#   上記の「各桁の値の合計」を求めるプログラミングを 
#   用いて、3の倍数を判定する再帰プログラムを作りなさい。 
#  [3.1]Linux  
#  [3.2]gcc  
#  [3.3]C言語  
#  [4]10月25日 木曜日まで 
#  よろしくお願いします。  
# 
# 
#  #include
#  
#  int keta(int a);     //与えられた桁数を全て足して返す関数
#  
#  int main(){
#       int a;
#  
#       printf("数を入力して下さい:");
#       scanf("%d",&a);
#  
#       printf("\n%dの桁数を足すと%dです.\n",a,keta(a));
#       return(0);
#  }
#  
#  int keta(int a){
#        if(a < 10)return(a);
#        return a % 10 + keta(a / 10);
#  }

'「各桁の値の合計」を用いて、3の倍数を判定する' :-
        整数を得る('正の整数(負数入力で終了)',_正の整数),
        '「各桁の値の合計」を用いて、3の倍数を判定する'(_正の整数,_3の倍数であるかどうかの判定).
'「各桁の値の合計」を用いて、3の倍数を判定する' :-
        '「各桁の値の合計」を用いて、3の倍数を判定する'.

'「各桁の値の合計」を用いて、3の倍数を判定する'(_負の整数,_3の倍数であるかどうかの判定) :-
        _負の整数 < 0,!.
'「各桁の値の合計」を用いて、3の倍数を判定する'(_正の整数,_3の倍数であるかどうかの判定) :-
        各桁の値の合計(_正の整数,_各桁の値の合計),
        '3の倍数を判定する'(_正の整数,_各桁の値の合計,_3の倍数であるかどうかの判定),
        writef('%t は %t\n',[_正の整数,_3の倍数であるかどうかの判定]),
        fail.

各桁の値の合計(0,0) :- !.
各桁の値の合計(N_1,S) :-
        M is N_1 mod 10,
        N_2 is N_1 // 10,
        各桁の値の合計(N_2,S_2),
        S is S_2 + M.

'3の倍数を判定する'(_整数,_各桁の値の合計,3の倍数です) :-
        0 is _各桁の値の合計 mod 3.
'3の倍数を判定する'(_整数,_各桁の値の合計,3の倍数ではありません) :-
        \+(0 is _各桁の値の合計 mod 3).