このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1370255305/785
#  与えられた自然数nを上回る2の冪を返す関数をなるべく最短処理になるように自作してください 
#  宿題じゃないので期限は問いません 
#  例: 
#  n=1 → 1 
#  n=2 → 2 
#  n=3 → 4 
#  n=6 → 8 
#  n=300 → 512 
# 
# 

与えられた自然数nを上回る2の冪を返す(_n,_2の冪) :-
        count('1ビット右シフト'(_n),_冪),
        _2の冪 is 2 ^ _冪.

'1ビット右シフト'(0) :- !,fail.
'1ビット右シフト'(N).
'1ビット右シフト'(N) :-
        M is N >> 1,
        '1ビット右シフト'(M).

count(P,N) :-
        findall(1,P,L),
        length(L,N).