このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/184
#  [1] 授業単元: 演算子 
#   
#  [2] 問題文: 変数の下位16ビット中の 1 のビット数を数える関数 int bit_count(int x) を作成せよ。 
#   

bit_count(_整数,_1ビット数) :-
        '変数の下位16ビット中の 1 のビット数を数える'(_整数,_1ビット数).
  
'変数の下位16ビット中の 1 のビット数を数える'(_整数,_1ビット数) :-
        _整数_1 is _整数 mod 0x10000,
        '1 のビット数を数える'(_整数_1,Count).

'1 のビット数を数える'(0,0) :- !.
'1 のビット数を数える'(1,1) :- !.
'1 のビット数を数える'(N,X) :-
        N_1 is N // 2,
        M is N mod 2,
        '1 のビット数を数える'(M,Y),
        X is Y + N_1.