このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1357191974/564
#  お題:まず、適当に32ビット整数Xを決めて引数がXと同じなら0を、Xより 
#  大きければ1を小さければ-1を返すaboutX関数を用意します。 
#  この関数を使ってXを求める。 
# 
# 

'まず、適当に32ビット整数Xを決めて引数がXと同じなら0を、Xより
大きければ1を小さければ-1を返すaboutX関数を用意します。
この関数を使ってXを求める。'(X) :-
        'まず、適当に32ビット整数Xを決めて',
        'この関数を使ってXを求める。'(0,-2147483647,2147483648,X).
        
'まず、適当に32ビット整数Xを決めて' :-
        '32ビットの整数'(_適当に決めた32ビットの整数),
        assertz(適当に決めた32ビットの整数X(_適当に決めた32ビットの整数)).

'32ビットの整数'(_適当に決めた32ビットの整数) :-
        _適当に決めた32ビットの整数 is random(4294967296) - 2147483647.

aboutX(_整数,_評価) :-
        適当に決めた32ビットの整数X(X),
        aboutX評価(_整数,X,_評価).

aboutX評価(_整数,_整数,0) :- !.
aboutX評価(_整数,X,1) :-
        _整数 > X,!.
aboutX評価(_整数,X,-1) :-
        _整数 < X,!.

'この関数を使ってXを求める。'(N,_下限,_上限,X) :-
        aboutX(N,_評価),
        'この関数を使ってXを求める。'(_評価,N,_下限,_上限,X),!.

'この関数を使ってXを求める。'(0,X,_,_,X).
'この関数を使ってXを求める。'(-1,N,_下限,_上限,X) :-
        N_1 is (N - _下限) // 2,
        'この関数を使ってXを求める。'(N_1,_下限,N,X).
'この関数を使ってXを求める。'(1,_下限,_上限,X) :-
        N_1 is (_上限 - N) // 2,
        'この関数を使ってXを求める。'(N_1,N,_上限,X).