このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/712
#  [1] 授業単元:プログラミングとアルゴリズム 
#  [2] 問題文(含コード&リンク):以下の課題をBinary search 関数の再帰呼び出しで実現しなさい。 
#  0 から100 までの範囲で整数の乱数を1000 個発生させ、Bubble sort 関数で整列させた後、ターゲット整数を再帰で検索するBinary search 関数を作って下のプログラム(rbinsearch.c) を完成させなさい。 
#  

'0 から100 までの範囲で整数の乱数を1000 個発生させ、Bubble sort 関数で整列させた後、ターゲット整数を再帰で検索する'(_ターゲット整数) :-
        '0 から100 までの範囲で整数の乱数を1000 個発生させ'(L),
        'Binary Search'(_ターゲット整数,L).

'0 から100 までの範囲で整数の乱数を1000 個発生させ'(L1) :-
        findall(N,(
                    for(1,_,1000),
                    N is random mod 1000),
                L1),
        バブルソート(L1,L2),
        'Binary Search'(_ターゲット整数,L2).

'Binary Search'(_ターゲット整数,L) :-
        length(L,N),
        N_1 is N // 2,
        length(L1,N_1),
        append(L1,[A|R],L),
        'Binary Search'(_ターゲット整数,L1,A,R) :-

'Binary Search'(_ターゲット整数,L1,_ターゲット整数,R) :- !.
'Binary Search'(_ターゲット整数,L1,A,R) :-
        _ターゲット整数 @< A,
        'Binary Search'(_ターゲット整数,L1).
'Binary Search'(_ターゲット整数,L1,A,R) :-
        _ターゲット整数 @>= A,
        'Binary Search'(_ターゲット整数,R).

バブルソート(_対象ならび,_整列済みならび) :-
        交換(_対象ならび,_対象ならびの一),!,
        バブルソート(_対象ならびの一,_整列済みならび).
バブルソート(_整列済みならび,_整列済みならび).

交換([],[]) :- !,fail.
交換([A,B|R],[B,A|R]) :-
        A @> B,!.
交換([A,R1],[A|R2]) :-
        交換(R1,R2).