このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1258320456/308
#  ・1から2000までの数字が昇順に格納された 
#  要素2000個の配列を用意 
#  ・乱数にて1から2000までのキー値を生成し、 
#  上記配列を二分探索で探索してキー値を見つけるまでの 
#  探索回数を記録 
#  ・以上を1000回繰り返し、平均探索回数を算出 
#  ・上記の平均探索回数を、理論値log2・2000と比較して示せ 
#   
#  という宿題を出されたのですが、まるでわかりません。 
#  よろしくお願いします。 
# 
# 

'1から2000までの数字が昇順に格納された要素2000個の配列を用意'(L) :-
        findall(N,for(1,N,2000),L).

'1から2000までの数字が昇順に格納された要素2000個の配列を用意し、乱数にて1から2000までのキー値を生成し、上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録。以上を1000回繰り返し、平均探索回数を算出する'(_探索回数合計) :-
        '1から2000までの数字が昇順に格納された要素2000個の配列を用意'(L),
        findsum(_探索回数,(
                    for(1,_,1000),
                    _キー値 is random(2000) + 1,
                    上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(1000,L,_キー値,_探索回数)),
                _探索回数合計).

上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(_要素数,L,_キー値,_探索回数) :-
        二分(_要素数,L,N1,N2,L1,A,L2),
        上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N1,N2,L1,A,L2,_キー値,1,_探索回数).

上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N1,N2,L1,_キー値,L2,_キー値,_探索回数,_探索回数) :- !.
上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N1,N2,L1,A,L2,_キー値,_探索回数_1,_探索回数) :-
        _キー値 @< A,
        上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N1,L1,_キー値,_探索回数_2),
        _探索回数 is _探索回数_1 + _探索回数_2,!.
上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N1,N2,L1,A,L2,_キー値,_探索回数_1,_探索回数) :-
        _キー値 @> A,
        上記配列を二分探索で探索してキー値を見つけるまでの探索回数を記録(N2,L2,_キー値,_探索回数_2),
        _探索回数 is _探索回数_1 + _探索回数_2,!.

二分(_要素数,L,N,N,L1,A,L2) :-
        1 is _要素数 mod 2,
        N is _要素数 // 2,
        append(L1,[A|L2],L),
        length(L1,N),!.
二分(_要素数,L,N,N_1,L1,A,L2) :-
        N is _要素数 // 2,
        N_1 is N - 1,
        append(L1,[A|L2],L),
        length(L1,N),!.